react 用connect 后改变state无法重新render子组件

//父组件
state = {
        a:[2]
    }

    componentDidMount() {
        this.update()
    }

    update() {
        // var a = JSON.parse(JSON.stringify(this.state.a))
        const a = this.state.a
        a.push(2)
        this.setState({
            a
        },() => {
            console.log(this.state.a)
        })

    }
//子组件
 {
                    this.props.a.map((v,i) => {
                        return (
                            <div key={i}>
                                {v}
                            </div>
                        )
                    })
                }

clipboard.png

子组件用了connect的时候,父组件state的a push,子组件无法重新渲染。
把connect去掉之后可以出发渲染。

把a深拷贝一下就可以了,请问react底层是作了比较吗

阅读 3.4k
4 个回答
update() {
  this.setState(prevState=>{a: [...prevState, 2]});
}
    update() {
        // var a = JSON.parse(JSON.stringify(this.state.a))
        const a = [...this.state.a]
        a.push(2)
        this.setState({
            a
        },() => {
            console.log(this.state.a)
        })

    }

和connect 没关系, 数组的 push 本身就不能触发,数据修改。就算是单组件,也不行

在这段代码中,shouldComponentUpdate 仅检查了 props.color 或 state.count 是否改变。如果这些值没有改变,那么这个组件不会更新。如果你的组件更复杂一些,你可以使用类似**“浅比较”**的模式来检查 props 和 state 中所有的字段,以此来决定是否组件需要更新。React 已经提供了一位好帮手来帮你实现这种常见的模式

https://react-1251415695.cos-...

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题