与道具和状态有关的问题有很多,但我仍然感到困惑。
简而言之,文档和答案都同意道具应该是不变的且状态可变的。
但是mapStateToProps
的整个思想是能够在状态改变时更新道具;然后触发重新渲染?那么为什么存在这种至关重要的方法呢?
我需要显示一个模式通知弹出窗口。一旦将数据添加到状态中,并且仅当存在这样的通知时,才应显示该通知。
function mapStateToProps(state) {
return {
notifications: getNotifications(state),
};
}
问题:
根据最佳实践,我应该在render()中使用状态访问,因为状态可能随时更改。即this.state.notifications
。但是mapStateToProps
从不更新组件的状态。因此,要获得理想的效果,我需要使用this.props.notifications
-反模式。
render() {
return (
{this.props.notifications.length > 0 && (
<Notification
isVisible={this.props.notifications.length > 0}
title={this.props.notifications[0].title}
/>
)}
<SomeOtherAlwaysVisibleViews />
);
以上工作正常。我不明白为什么我应该在prop更改上触发并使用setState,而只是在render()中使用state而不是props?