来自 Redux 的 React 状态更新导致超出最大更新深度错误

我对 React 和 Redux 相当陌生,并且在根据服务器的错误响应(使用 Express)显示错误状态时遇到了一些困难。


我研究过的大多数其他类似问题都与 onClick、onSubmit 或 onChange 相关,但我还没有看到像我这样的问题。


预期结果:从存储中检索错误状态并显示在组件内


问题源于此部分:


if (nextProps.errors){

  this.setState({ errors: nextProps.errors });    

}

完整的Login.js:


import React, { Component } from "react";

import { connect } from "react-redux";

import PropTypes from "prop-types";

import "../css/login.css";

import { loginUser } from "../../redux/actions/authActions";

import TextFieldGroup from "../common/textFieldGroup";


class Login extends Component {

  constructor() {

    super();

    this.state = {

      username: '',

      password: '',

      errors: {}

    };

    

    this.onChange = this.onChange.bind(this);

    this.onSubmit = this.onSubmit.bind(this);

  }


  componentDidMount() {

    if (this.props.auth.isAuthenticated) {

      this.props.history.push('/dashboard');

    }

  }


  componentDidUpdate(nextProps) {

    if (nextProps.auth.isAuthenticated) {

      this.props.history.push('/dashboard');

    }


    if (nextProps.errors){

        this.setState({ errors: nextProps.errors });    

    }

  }


  onSubmit(e) {

    e.preventDefault();


    const userData = {

      username: this.state.username,

      password: this.state.password

    };


    this.props.loginUser(userData);

  }


  onChange(e) {

    this.setState({ [e.target.name]: e.target.value });

  }


  render() {

    const { errors } = this.state;


    return (

      <div className="login">

        <div className="container">

          <div className="row">

            <div className="col-md-8 m-auto">

              <h1 className="display-4 text-center">Log In</h1>

              <p className="lead text-center">

                <input type="submit" className="btn btn-info btn-block mt-4" />

              </form>

            </div>

          </div>

        </div>

      </div>

    );

  }

}


我试过了:

  1. 将值分配给临时变量,但这非常笨拙,并且在我看来使代码变得混乱。

  2. 验证它是否为空/不为空,这自然会加强无限循环或积极验证,因为它不为空,因此错误状态永远不会在页面上更新。

我确实从服务器获得了正确的错误响应,正如我在 Redux 开发工具中看到的那样。

提前致谢。


互换的青春
浏览 104回答 1
1回答

开满天机

更改条件:if (nextProps.errors)到:if (this.props.errors !== nextProps.errors)目前看来运作良好。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript