Является ли mapStateToProps анти-паттерном? - PullRequest
0 голосов
/ 10 октября 2019

Есть несколько вопросов и ответов, связанных с реквизитом и состоянием, но я все еще в замешательстве. Вкратце, документация и ответы согласны с тем, что реквизит должен быть неизменным и изменяемым. Но вся идея 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 ()?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...