在ComponentDidUpdate中出现奇怪的条件行为。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在ComponentDidUpdate中出现奇怪的条件行为。相关的知识,希望对你有一定的参考价值。

我在玩javascript和react时遇到了一个奇怪的情况。

async componentDidUpdate(previousProps, previousState) {
    console.log(previousState.questionNo,this.state.questionNo);
    console.log(!previousState.questionNo === this.state.questionNo)
    if (!previousState.questionNo === this.state.questionNo) {
            console.log("I'm here")
            const index = Math.floor(Math.random() * 12); //12 is hardcoded i need to find sth better later
            const resp = await questionsApi.get(`/questions/${index}`);
            this.setState({ question: resp.data });
        }
    }

当我在控制台检查时,即使值不相等,组件也没有渲染。而且在控制台 console.log(!previousState.questionNo === this.state.questionNo) 笨拙地总是提供false。

控制台输出如下。

1 1 Component.js:16
false Component.js:17
1 2 Component.js:16
false component.js:17

任何想法是怎么回事?

谅谅

答案

替换

if (!previousState.questionNo === this.state.questionNo)

if (previousState.questionNo !== this.state.questionNo)

这是因为做 !previousState.questionNo 会将该值转换为布尔值(大部分为 false),它永远不会等于 this.state.questionNo 如同 1, 2诸如此类

以上是关于在ComponentDidUpdate中出现奇怪的条件行为。的主要内容,如果未能解决你的问题,请参考以下文章

React app,componentDidUpdate - 跳转列表,无限循环

在 componentDidUpdate 中无法访问的状态

mapStateToProps,但未调用componentDidUpdate

react native中componentdidmount和componentdidupdate之间的区别是什么

在 React.Js 中进行更新后的无限 componentDidUpdate() 渲染

与 setState 回调相比,使用 componentDidUpdate 有啥优势?