Как getState и диспетчеризация импортируются в создателе действий redux-thunk? - PullRequest
0 голосов
/ 06 октября 2019
import _ from 'lodash';
import jsonPlaceholder from '../apis/jsonPlaceholder';

export const fetchPostsAndUsers = () => async (dispatch, getState) => {
  await dispatch(fetchPosts());

  _.chain(getState().posts)
    .map('userId')
    .uniq()
    .forEach(id => dispatch(fetchUser(id)))
    .value();
};

export const fetchPosts = () => async dispatch => {
  const response = await jsonPlaceholder.get('/posts');

  dispatch({ type: 'FETCH_POSTS', payload: response.data });
};

В приведенном выше коде функции getState и dispatch передаются в качестве аргументов функции создателя действия. Что меня удивляет, так это то, почему эти функции никуда не импортируются или как-то происходит с реакцией / редукцией для нас?

Ответы [ 2 ]

0 голосов
/ 06 октября 2019

Когда вы соединяете реагирующий компонент с redux, используя функцию connect, предоставляемую redux, вы переходите к функциям: mapStateToProps и mapDispatchToProps. Это будут параметры, которые вы ищете (dispatch и getState).

0 голосов
/ 06 октября 2019

хорошо, я попытаюсь очистить вашу путаницу. Как вы знаете, создатели действий возвращают простой объект javascript, но thunk - это промежуточное ПО, которое позволяет вам возвращать функцию вместо простого объекта javascript от создателей действий, поэтому, если вы используете thunk, если вывернуть plain javascript объект от создателя действия, он обрабатывается обычным способом, но когда вы возвращаете функцию от создателя действия, чем обрабатываете thunk и вызываете эту функцию с dispatch и getState , так что вы можете отправлять действие асинхронно, вы не передаете эти аргументы, смотрите так, что вы возвращаете callback от создателя действия, и thunk вызываете этот обратный вызов с этимиаргументы.

Надеюсь, это поможет.

...