#reactjs #redux #react-redux
#reactjs #сокращает #react-redux
Вопрос:
Я работаю над проектом, в котором четыре разных пользователя входят в систему и регистрируются, а также их панель мониторинга. Я создал часть входа для всех пользователей, поскольку это единый API, я использовал switch case для перенаправления пользователя на панель мониторинга в зависимости от типа пользователя. Я переопределяю и axios в этом процессе
Теперь мне нужно создать для них часть регистрации. Для регистрации у каждого пользователя разные API. Я создал часть регистрации и хранилище redux для одного пользователя. Итак, для оставшегося пользователя, сделайте, мне нужно создать другое хранилище или я могу сделать это в том же самом хранилище.
Ниже приведен мой код формы регистрации
Примечание: форма, которую я использовал ниже, приведена только для примера. В моем оригинале из много полей.
Заранее спасибо
/***Form One***/
import React, { Component } from 'react';
import {
TextField } from '@material-ui/core';
class FormOne extends Component {
constructor(props){
super(props);
this.state = {
email: "",
password: "",
confirmPassword: ""
};
}
buttonClick = event => {
event.preventDefault();
console.log(this.state);
this.setState({
submitted: true
})
const {email, password} = this.state;
const { dispatch } = this.props;
if(email amp;amp; password) {
dispatch(registerUser(email, password))
}
}
render(){
return(
<div>
<TextField
id="standard-email-input"
label="Email"
className="form-field"
type="email"
name="email"
autoComplete="email"
onChange={this.props.email}
/>
<TextField
id="standard-password-input"
label="Password"
className="form-field"
type="password"
name="password"
onChange={this.props.password}
/>
<TextField
id="standard-confirm-input"
label="Confirm Password"
className="form-field"
type="password"
onChange={this.props.confirmPassword}
name="confirmPassword"
/>
<Button variant="contained" className={classes.submitButton} onClick={this.buttonClick}>
Register Now
</Button>
</div>
)}
}
export default FormOne;
/***Form Two***/
import React, { Component } from 'react';
import {
TextField } from '@material-ui/core';
class FormTwo extends Component {
constructor(props){
super(props);
this.state = {
email: "",
password: "",
confirmPassword: ""
};
}
buttonClick = event => {
event.preventDefault();
console.log(this.state);
this.setState({
submitted: true
})
const {email, password} = this.state;
const { dispatch } = this.props;
if(email amp;amp; password) {
dispatch(registerUser(email, password))
}
}
render(){
return(
<div>
<TextField
id="standard-email-input"
label="Email"
className="form-field"
type="email"
name="email"
autoComplete="email"
onChange={this.props.email}
/>
<TextField
id="standard-password-input"
label="Password"
className="form-field"
type="password"
name="password"
onChange={this.props.password}
/>
<TextField
id="standard-confirm-input"
label="Confirm Password"
className="form-field"
type="password"
onChange={this.props.confirmPassword}
name="confirmPassword"
/>
<Button variant="contained" className={classes.submitButton} onClick={this.buttonClick}>
Register Now
</Button>
</div>
)}
}
export default FormTwo;
/***action.js***/
import axios from "axios";
import { REGISTERATION_REQUEST, REGISTERATION_COMPLETED, REGISTERATION_ERROR } from "./types";
import qs from "qs";
import history from '../../history/history.js';
const startRegister = () => {
return {
type: REGISTERATION_REQUEST
};
};
const registerComplete = data => ({
type: REGISTERATION_COMPLETED,
data
});
const registerError = err => ({
type: REGISTERATION_ERROR,
err
});
export const registerUser = (email, password) => {
return dispatch => {
dispatch(startRegister());
let headers = {
"Content-Type": "application/x-www-form-urlencoded"
};
const data = qs.stringify({
email, password
});
axios
.post("api-link/registerUserOne", data, {
headers: headers
})
.then(function (resp) {
dispatch(registerComplete());
window.location.reload();
history.push('/login');
//dispatch(registerComplete(resp.data));
})
.catch(err => dispatch(registerError(err)));
}
};
/**reducer.js***/
import { REGISTERATION_REQUEST, REGISTERATION_COMPLETED, REGISTERATION_ERROR } from "./types";
import initialState from "./initialState";
const reducer = (state = initialState, action) => {
switch (action.type) {
case REGISTERATION_REQUEST:
return {
...state,
loading: true,
token: null,
userName: ""
};
case REGISTERATION_COMPLETED:
return {
...state,
token: action.data.access_token,
userName: action.data.userName,
userType: action.data.userType
};
case REGISTERATION_ERROR:
return {
...state,
loading: false,
error: true,
people: []
};
default:
return state;
}
};
export default reducer;
/***initialState.js***/
const initialState = {
loading: false,
token: null,
userName: "",
userType: null
};
export default initialState;
/***Type.js***/
const REGISTERATION_REQUEST = "REGISTERATION_REQUEST";
const REGISTERATION_COMPLETED = "REGISTERATION_COMPLETED";
const REGISTERATION_ERROR = "REGISTERATION_ERROR";
export { REGISTERATION_REQUEST, REGISTERATION_COMPLETED, REGISTERATION_ERROR };
/***index.js(reducer)***/
import reducer from "./reducer";
export default reducer;
Комментарии:
1. Я предполагаю, что у вас есть что-то, связанное с ролями для каждого пользователя, вы можете использовать одну и ту же форму регистрации для каждого из них, но просто есть что-то вроде select для определения роли. Нам также нужно просмотреть некоторый код, чтобы понять, что вы пытаетесь сделать.
2. Вы спрашиваете о довольно открытом сценарии, который может быть решен многими способами. Собираетесь ли вы использовать одну и ту же форму для всех пользователей? Является ли вызов api основным различием между пользователями или есть что-то большее?
3. Я создал разные формы для каждого пользователя, поскольку в них есть разные поля для каждого пользователя.
4. Я добавил свой код в вышеприведенный пост @NicolaeMaties
5. Я не понимаю, как вы различаете, какой пользователь получает какую форму, вы должны принять это решение на основе пользовательского ввода.