Ответ 1
Redux сохраняет состояние вашего приложения в одном объекте, называемом хранилищем. connect
позволяет подключать компоненты React к состоянию вашего хранилища, то есть передавать им состояние вашего хранилища как props
.
Без синтаксиса декоратора экспорт компонентов будет выглядеть как
export default connect(state => ({todos: state.todos}))(Home);
Что он делает, так это то, что он принимает ваш компонент (здесь Home
) и возвращает новый компонент, который правильно подключен к вашему хранилищу.
Подключено здесь означает: вы получаете состояние хранилища как props
, и когда это состояние обновляется, этот новый подключенный компонент получает новые реквизиты. Подключено также означает, что у вас есть доступ к функции store dispatch
, которая позволяет вам изменять состояние хранилища.
Четыре аргумента:
-
mapStateToProps, вы, вероятно, не хотите вводить все состояние своего хранилища во все ваши подключенные компоненты. Эта функция позволяет вам определить, какие секторы состояния вам интересны, или передать в качестве
props
новые данные, полученные из состояния хранилища. Вы можете сделать что-то вродеstate => ({todosCount: state.todos.length})
, а компонентHome
получитtodosCount
prop -
mapDispatchToProps делает то же самое для функции отправки. Вы могли бы сделать что-то вроде
dispatch => ({markTodoAsCompleted: todoId => dispatch(markTodoAsCompleted(todoId))})
-
mergeProps позволяет вам определить настраиваемую функцию для объединения реквизитов, получаемых вашим компонентом, те, которые исходят от
mapStateToProps
и те, которые исходят отmapDispatchToProps
-
опции, некоторые параметры...