Реактивное состояние становится нулевым после использования избыточности - PullRequest
1 голос
/ 24 февраля 2020

У меня есть это приложение response-redux, все работало нормально, пока я не решил использовать redux для управления состоянием, тогда состояние реакции становится нулевым.

это моя страница входа, где я сталкиваюсь с проблемой :

class Login extends Component {
    constructor() {
        super();
        this.state = {
            email: '',
            password: '', 
        }

        this.handleSubmit = this.handleSubmit.bind(this);
        this.handleChange = this.handleChange.bind(this);

    }


    handleSubmit = (event) => {
        event.preventDefault();

        let userData ={
            email: this.state.email,
            password: this.state.password
        }

        this.props.loginUser(userData, this.props.history);

    }

    handleChange = (event) => {
        this.setState({
            [event.target.name]:event.target.value
        });

    }


    render() {
        const { classes,  UI: { loading , errors  }} = this.props;
         //const {  } = this.state;
        return (
            <Grid container className={classes.form} spacing={10}>
                <Grid item sm />
                <Grid item sm >
                    <img src={AppIcon} alt="AppIcon" className={classes.image} />
                    <Typography variant="h3" className={classes.pageTitle}>
                        Login
                </Typography>
                    <form noValidate onSubmit={this.handleSubmit}>
                        <TextField id="email" name="email" type="email" label="Email" className={classes.textField} value={this.state.email} onChange={this.handleChange} fullWidth helperText={errors.email} error={ errors.email? true: false } />

                        <TextField id="password" name="password" type="password" label="Password" className={classes.textField} value={this.state.password} onChange={this.handleChange} fullWidth helperText={errors.password } error={ errors.password ? true: false } />

                        { errors.general && (
                            <Typography variant="body2" className={classes.customError} >
                                {errors.general}
                            </Typography>
                        )}

                        <Button type="submit" variant="contained" className={classes.button} color="primary" disabled={loading} > Log In  { loading && (<CircularProgress color="secondary" size={30} className={classes.progress} />) } </Button>

                    </form>
                    <small>
                         Dont have an account? sign up <Link to="/signup">here </Link> </small>
                </Grid>
                <Grid item sm />
            </Grid>
        )
    }
}

Login.propTypes = {
    classes: PropTypes.object.isRequired,
    loginUser: PropTypes.func.isRequired,
    user: PropTypes.object.isRequired,
    UI: PropTypes.object.isRequired
  };

  const mapStateToProps = (state) => ({
    user: state.user,
    UI: state.UI
  });


  const mapActionsToProps = {
    loginUser
  };

  export default connect(mapStateToProps, mapActionsToProps)(withStyles(styles)(Login));

, и я получаю следующее сообщение об ошибке:

TypeError: Cannot read property 'email' of null

        Login
  93 |                </Typography>
  94 |                    <form noValidate onSubmit={this.handleSubmit}>
> 95 |                        <TextField id="email" name="email" type="email" label="Email" className={classes.textField} value={this.state.email} onChange={this.handleChange} fullWidth helperText={errors.email} error={ errors.email? true: false } />
     | ^  96 | 
  97 |                        <TextField id="password" name="password" type="password" label="Password" className={classes.textField} value={this.state.password} onChange={this.handleChange} fullWidth helperText={errors.password } error={ errors.password ? true: false } />

Это начальное состояние пользователя из redux:

 const initialState = {
    authenticated: false,
    loading: false,
    credentials: {},
    likes: [],
    notifications: []
  };

и это начальное состояние пользовательского интерфейса :

 const initialState = {
    loading: false,
    errors: null
  };

Я не дал ему свойства электронной почты или пароля, потому что они находятся в состоянии входа в систему, но я получаю его как Null.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...