Как справка должна быть отправлена ​​моим помощникам? - PullRequest
0 голосов
/ 08 мая 2018

Я использую redux и redux-thunk. Во многих моих создателях действий я использую помощников, которым я передаю dispatch, мне интересно, является ли это плохой практикой или анти-паттерном, или я могу избежать передачи dispatch таким образом.

Например, у меня есть создатель действий, например:

import * from "./helpers";

export const listenForMessages = () => async (dispatch) => {
    helpers.updateListening(true, dispatch);
}

И у меня есть помощник внутри helpers.js вот так:

export const updateListening(isListening = false, dispatch) {
   // do something interesting
   disptach(...);
}

Я бы хотел избежать отправки. Это ужасно.

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

Как сказал @riwu, передача dispatch излишне, у вас могут быть помощники, которые просто возвращают объект действия. Кроме того, если вы используете react-redux, создатели действий могут автоматически переноситься в диспетчеризацию, если вы передаете их как объект mapDispatchToProps. https://github.com/reactjs/react-redux/blob/master/docs/api.md#connectmapstatetoprops-mapdispatchtoprops-mergeprops-options

0 голосов
/ 08 мая 2018

Вместо вызова dispatch(someAction) в updateListening, сделайте так, чтобы он возвращал объект действия вместо:

export const updateListening(isListening = false) {
   // do something interesting
   return { type: SOME_ACTION, payload };
}

Это делает updateListening точно так же, как и любые другие создатели действий, поэтому вы можете отправить действие в вызывающей стороне с помощью:

export const listenForMessages = () => async (dispatch) => {
    dispatch(helpers.updateListening(true)); // or `bindActionCreators`
} 

Если updateListening необходимо выполнить асинхронные вызовы перед отправкой, то вы можете либо вернуть обещание и await его в listenForMessages, либо превратить его в создателя асинхронных действий, точно так же, как ваш listenForMessages, тогда вы можете отправьте его точно так же: dispatch(helpers.updateListening(true)).

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