我知道当组件在setState
或componentWillUpdate
内重复调用componentDidUpdate
时会发生这种情况,但是就我的情况而言,即使在此之后我只调用了setState
这个错误。这是我的state
和componentDidUpdate
:
constructor(props) {
super(props);
this.state = { usernameAlreadyUsing: false };
}
componentDidUpdate() {
if(this.props.usernames.includes(this.props.username)) {
this.setState({ usernameAlreadyUsing: true });
}
}
答案 0 :(得分:1)
每次setState
被称为componentDidUpdate
时都会回想起来。所以
这种情况会使您进入无休止的循环。
在这里尝试
constructor(props) {
super(props);
this.state = { usernameAlreadyUsing: false };
}
componentDidUpdate() {
const { usernameAlreadyUsing } = this.state;
if(this.props.usernames.includes(this.props.username) && !usernameAlreadyUsing) {
this.setState({ usernameAlreadyUsing: true });
}
}
通过此实现,您的代码仅在componentDidUpdate
中输入一次。
希望它能起作用。
答案 1 :(得分:0)
constructor(props) {
super(props);
this.state = { usernameAlreadyUsing: false };
}
componentDidUpdate(prevProps) {
if(this.props.usernames.length != prevProps.usernames.length) {
if(this.props.usernames.includes(this.props.username)) {
this.setState({ usernameAlreadyUsing: true });
}
}
}
尝试。这是您上面的问题,一旦其设置用户名已经存在,则每次条件成功时都会再次调用setState。试试这个
希望它会有所帮助。毫无疑问地