从shouldComponentUpdate内调用setState可以吗?
响应状态更改,我想触发另一个状态更改。这天生是一个坏主意吗?
场景的特定种类是将该组件建模为状态机,该状态机根据的值呈现不同的信息this.state.current_state
。但是外部事件可以通过通量存储更改其状态,从而促使其经历状态转换。以下是一个构想可以使您理解的方案:
我认为正确的生命周期方法可以做到这一点shouldComponentUpdate
。达到此效果的方法:
shouldComponentUpdate: function(nextProps, nextState) { if (nextState.counter > 4 && this.state.current_state !== DISPLAY_MANY) {
this.setState({ current_state: DISPLAY_MANY });
}
return true;
}
在某些子组件中,counter
可能会增加,因此counter
,我不想显式地对状态进行编码,而不是根据某个变量的值推断其显示的内容。
实际场景比这要复杂得多,但希望此场景足够详细,可以使您理解。做我想的可以吗?
编辑:固定代码示例,通过添加额外的状态条件来避免触发无限循环
回答:
shouldComponentUpdate
专门用于确定组件是否应该完全更新。做类似的事情:
if (nextState.counter == this.state.counter && nextProps.foo == this.Props.foo) { return false;
}
componentWillReceiveProps
用于响应 外部
(道具)更改。componentWillReceiveState
正如文档中指出的那样,没有等效项。您的组件(并且只有您的组件)通常通过以下一个或多个事件来触发自己的状态更改:
- 初始渲染
getInitialState
- 更新了道具
componentWillReceiveProps
<input>
字段等中的用户交互,例如onChangeInput()
组件中的自定义功能。- 不断变化:响应来自侦听器的存储更改,通常在调用的自定义函数中进行
getStateFromStores()
,状态会更新。
我想
在您的情况下,您可以将逻辑(以确定状态是否需要更新)移至getStateFromStores()
处理商店更新的功能。
或者,您可以简单地保持其状态,并更改渲染功能,以便在counter> 4时以不同的方式渲染。
以上是 从shouldComponentUpdate内调用setState可以吗? 的全部内容, 来源链接: utcz.com/qa/429466.html