Так почему бы не напрямую вызвать создатель действия внутри компонента, как вы это делаете, а не передать его в функцию connect()
, как это делают все остальные?
Redux не обнаруживает автоматически при каждом вызовесоздатель действия.
Redux не обнаруживает автоматически функцию, возвращающую объект, являющийся действием.
Мой actions/index.js
файл содержит создателя моего действия.Вы и я называем эту функцию создателем действия, но, объективно говоря, это просто функция.Это все, что видит Redux.Redux не знает, что эта конкретная функция является действием.
Поэтому, когда вы входите в свой компонент и импортируете создателя действия, вот так: import { selectSong } from ‘../actions’;
Объективно говоря, мы не импортируемсоздатель действия в компонент, технически мы просто импортируем функцию.
Вы можете вызывать создателя действия весь день внутри ваших компонентов, но это будет рассматриваться как обычный вызов функции JavaScript, который будет возвращать объект иВот и все.
Возвращаемый объект не будет перенаправлен на приставку.Если мы когда-нибудь хотим убедиться, что действие попадает в редуктор, мы должны передать его этой диспетчерской функции.
Вот более прямой пример:
const store = createStore(ourDepartments);
store.dispatch(createPolicy('Alejandra', 35));
store.dispatch(createPolicy('Ben', 20));
store.dispatch(createPolicy('Daniel', 78));
store.dispatch(createClaim('Alejandra', 120));
store.dispatch(createClaim('Ben', 50));
store.dispatch(deletePolicy('Daniel'));
console.log(store.getState());
Обратите внимание, каккаждый раз, когда я отправляю действие, я вызываю создателя действия, который возвращал объект действия, который непосредственно передается в функцию store.dispatch()
.
Если я не передал результаты этих создателей действия в отправкуно вместо этого вызывается просто:
createPolicy('Alejandra', 35),
createClaim('Alejandra', 120),
deletePolicy(‘Alejandra’)
. Это никогда не обновит хранилище с избыточностью, оно вернет действие, но оно никогда не отправлялось в избыточность, и они никогда не оказывались внутри редуктора.
Чтобы убедиться, что создатель действия действительно обновляет наше состояние, мы должны выполнить возвращаемое действие и передать его нашей функции диспетчеризации.
Теперь, конечно, нет ссылки на функцию диспетчеризации внутринаш компонент.Так что же происходит?
Когда мы передаем нашего создателя действий в функцию connect()
, функция connect()
выполняет специальную операцию над функциями внутри объекта действий
export default connect(mapStateToProps, { selectSong })(SongList);
Функция connect()
по сути превращает действие в новую функцию JavaScript.Когда мы вызываем новую функцию JavaScript, функция connect()
автоматически вызывает нашего создателя действия, выполняет возвращаемое действие и автоматически вызывает для нас функцию dispatch()
.
Таким образом, передавая действиесоздатель в функцию connect()
, всякий раз, когда мы вызываем создателя действия, который добавляется к нашему объекту props, функция автоматически выполняет возвращаемое действие и бросает его в функцию отправки для нас.
Итак, все, что происходит за кулисами, и вам не нужно задумываться об этом, когда вы используете функцию connect()
.
Так вот почему инженерпередать нашего создателя действия функции connect()
, а не просто вызывать его изнутри компонента.
Поэтому, когда вы хотите вызвать создателя действия из компонента, вы всегда будете передавать его в этот компонент.Функция соединения, а не просто произвольно вызывать ее внутри компонента.
Надеюсь, это имеет смысл.