【问题标题】:React context not causing a rerender反应上下文不会导致重新渲染
【发布时间】:2020-09-03 19:38:44
【问题描述】:

对这种情况非常困惑。我在上下文中有两种方法,一种会导致消费者重新渲染就好了,另一种不会。

这个很好用:

this.setPage = (tag) => {
            this.setState(state => {

                for (let item of tag) {
                    if (!state.tags.includes(item)) {
                        state.tags.push(item)
                    }
                }

                state.currentTags = tag
                return tag
            })
        }

但是这个没有:

this.popPage = (tag) => {
            this.setState(state => {                
                if (state.tags.includes(tag)) {
                    if (state.tags.length == 1)
                        return

                    state.tags.pop()
                    state.currentTags = [state.tags[state.tags.length - 1]]

                    return tag
                }
            })
        }

这些基本上只是将项目推送和弹出到数组中。代码运行正常,但第二个函数的消费者没有更新

<Page.Consumer>
   {page => /*Components go here*/}
</Page.Consumer>

【问题讨论】:

    标签: javascript reactjs react-context


    【解决方案1】:

    首先,你应该返回状态(不是标签)。我不知道标签的确切用途,但对我来说,将下一个状态设置为标签没有多大意义。 在第二个街区,情况更糟。如果条件不满足,它甚至不返回任何内容作为下一个状态。

    【讨论】:

    • 我不确定这是否会有所作为?我没有使用函数的返回值,如果任何状态对象发生更改,消费者应该重新渲染。我检查了你提到的方式,它仍然是一样的
    猜你喜欢
    • 1970-01-01
    • 2019-03-07
    • 2020-10-19
    • 2019-06-10
    • 2022-10-23
    • 2022-01-22
    • 1970-01-01
    • 2021-01-17
    • 2015-11-03
    相关资源
    最近更新 更多