我有一个父类组件,它在componentWillMount
中有一个函数,它遍历一个字符串列表,并为每个字符串创建一个元素,最后setState
this.state.map
。每个子元素都会收到一个prop,它是父级中名为this.state[element]
的状态。
我将这些元素放入this.state.map
的原因是因为我可以更改(某些)上层组件中的内容而不必每次都重新渲染数组(这非常缓慢)并且我没有想要使用shouldComponentUpdate
。此外,我可以通过切换不同的地图状态来快速更改元素。
问题是,当父this.state[element]
(作为初始componentWillMount
中的道具传递给孩子)发生变化时,它不会更新孩子的道具。父州确实发生了变化。
这是一种合法的方式吗? 对不起,我没有提供代码示例。目前这只是一团糟。
答案 0 :(得分:0)
只有ReactDOM.render(以及服务器端渲染等),setState或forceUpdate才会导致您的孩子重新渲染。如果您只是改变状态对象,React不会意识到这一点,并且不会重新渲染。无论如何,不通过setState改变状态是无效的,你应该尽量使你的状态保持不变。为了让您了解孩子的变化,您需要使用setState
来更新this.state[element]
。
来自React docs:
注意: 永远不要直接改变this.state,因为之后调用setState()可能会替换你所做的突变。把this.state看作是不可变的。