为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

互换的青春 2023-12-14 15:48:07
我对 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>    );  }}我试过了:将值分配给临时变量,但这非常笨拙,并且在我看来使代码变得混乱。验证它是否为空/不为空,这自然会加强无限循环或积极验证,因为它不为空,因此错误状态永远不会在页面上更新。我确实从服务器获得了正确的错误响应,正如我在 Redux 开发工具中看到的那样。提前致谢。
查看完整描述

1 回答

?
开满天机

TA贡献1786条经验 获得超12个赞

更改条件:

if (nextProps.errors)

到:

if (this.props.errors !== nextProps.errors)

目前看来运作良好。


查看完整回答
反对 回复 2023-12-14
  • 1 回答
  • 0 关注
  • 94 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信