Получение доступа к actions и state с помощью функции connect()
Функция connect()
, предоставляемая пакетом react-redux
, может принимать до четырёх аргументов, каждый из которых является необязательным. После вызова функции connect()
возвращается компонент высшего порядка, который можно использовать для оборачивания любого компонента React.
connect([mapStateToProps], [mapDispatchToProps], [mergeProps], [options])
Аргумент mapStateToProps
является функцией, которая возвращает либо обычный объект, либо другую функцию. Передача этого аргумента connect()
приводит к подписке компонента-контейнера на обновления хранилища Redux. Это означает, что функция mapStateToProps
будет вызываться каждый раз, когда состояние хранилища изменяется.
const mapStateToProps = state => {
return {
...state.cartReducer,
...state.filterReducer
};
};
Аргумент mapDispatchToProps
может быть либо объектом, либо функцией, которая возвращает либо обычный объект, либо другую функцию.
const mapDispatchToProps = dispatch => {
return {
actionsCart: bindActionCreators(actionsCart, dispatch),
actionsFilter: bindActionCreators(actionsFilter, dispatch)
};
};
Если функции connect()
передаётся аргумент mergeProps
, то он представляет собой функцию, которая принимает следующие три параметра:
stateProps
— объект свойств, возвращённый из вызоваmapStateToProps()
.dispatchProps
— объект свойств с генераторами действий изmapDispatchToProps()
.ownProps
— исходные свойства, полученные компонентом.
Эта функция возвращает простой объект со свойствами, который будет передан заключённому в обёртку компоненту. Это полезно для осуществления условного маппинга части состояния хранилища Redux или генераторов действий на основе свойств.
...
const mergeProps = (stateProps, dispatchProps, ownProps) => {
return { ...ownProps, ...stateProps, ...dispatchProps };
}
...
export default connect(mapStateToProps, mapDispatchToProps, mergeProps)(App);
В mergeProps
прилетают stateProps
, который содержит текущее состояние и dispatchProps
, который дает возможность отправить событие. Далее возвращаем объект с текущим state
и событием, который попадет в props
нашего компонента.
Если connect()
не передают эту функцию, то используется её стандартная реализация:
export default connect(mapStateToProps, mapDispatchToProps)(App);
Тут все просто, определяем функции mapStateToProps() для чтения состояния и mapDispatchToProps() для передачи события. Далее генерируем компонент путем передачи созданных функций в connect().
Last updated
Was this helpful?