【发布时间】:2015-12-24 16:39:41
【问题描述】:
似乎在某些情况下 React 不会将状态更改传播到子组件中。
最小示例
我试图将我观察到的行为归结为我能找到的最小的测试用例,但它最终仍然非常大。对于那个很抱歉。
class Inner extends React.Component<{ value: number }, { value: number }> {
constructor(props: { value: number }) {
super(props);
this.state = { value: props.value };
}
render() {
return <span> { this.state.value } </span>
}
}
class Test extends React.Component<{}, { value: number }> {
constructor(props: {}) {
super(props);
this.state = { value: 0 };
setTimeout(() => { this.setState({ value: 1 }); }, 500);
}
render() {
return <span>
<Inner value={ this.state.value } />
</span>;
}
}
React.render(<Test />, document.getElementById('somediv'));
快速总结
Test 在其状态中具有“值”,该值通过其内部组件“Inner”传递并显示。
在 Test 的构造方法中,我将状态上的value 设置为 0。500 毫秒后,我将其设置为 1。我希望这会将 Inner 的显示更改为也显示 1,因为它取决于 value来自this.state,但事实并非如此。为什么不呢?
非常奇怪的是,如果我将return <span> { this.state.value } </span> 行更改为在this.props.value 内使用this.props.value,那么它实际上会更新。当然,我需要在我提炼出这个例子的应用程序中使用状态。
我希望我在这里遗漏了 React 的一些基本部分。这是什么?
【问题讨论】:
标签: reactjs typescript