Есть несколько вопросов и ответов, связанных с реквизитом и состоянием, но я все еще в замешательстве. Вкратце, документация и ответы согласны с тем, что реквизит должен быть неизменным и изменяемым. Но вся идея mapStateToProps
в том, чтобы иметь возможность обновлять реквизит при изменении состояния;и впоследствии вызвать повторную визуализацию? Так почему же существует этот важный метод?
Мне нужно отобразить модальное всплывающее уведомление. Уведомление должно отображаться после добавления данных в состояние и только в том случае, если такое уведомление существует.
function mapStateToProps(state) {
return {
notifications: getNotifications(state),
};
}
Проблема: в соответствии с передовой практикой я должен использовать доступ к состоянию в моем рендере (), поскольку он может измениться в любое время. Т.е. 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 />
);
Выше работает. Я не понимаю, почему я должен запускать изменения реквизита и использовать вместо него setState, просто для использования состояния вместо реквизита в render ()?