Вернуть обещание для простого создателя действий в реакции, используя реагировать-редукса - PullRequest
0 голосов
/ 02 апреля 2019

Я новичок в реаги-редуксе. Здесь, я думаю, это очень простой вопрос. Но у меня есть создатель действий, и я использую избыточный толчок.

export const updateActivePage = (activePage) => {
  return {
    type: UPDATE_ACTIVEPAGE,
    payload: activePage
  }
}

что я пытался это

export const updateActivePage = (activePage) => (dispatch) => {
  return new Promise( function(resolve, reject) {
    dispatch({
      type: UPDATE_ACTIVEPAGE,
      payload: activePage
    })
  })
}

функция после этого не вызывается.

Теперь, в моем componentdidmount В хотите использовать .then после этого

Итак, для этого я хочу вернуть обещание. Итак, как я могу это сделать? Я использую reux-thunk

Ответы [ 2 ]

0 голосов
/ 02 апреля 2019

Прямо из Рединкс-thunk readme :

function makeASandwichWithSecretSauce(forPerson) {
  // We can invert control here by returning a function - the "thunk".
  // When this function is passed to `dispatch`, the thunk middleware will intercept it,
  // and call it with `dispatch` and `getState` as arguments. 
  // This gives the thunk function the ability to run some logic, and still interact with the store.
  return function (dispatch) {
    return fetchSecretSauce().then(
      sauce => dispatch(makeASandwich(forPerson, sauce)),
      error => dispatch(apologize('The Sandwich Shop', forPerson, error))
    );
  };
}

...

// It even takes care to return the thunk’s return value
// from the dispatch, so I can chain Promises as long as I return them.

store.dispatch(
  makeASandwichWithSecretSauce('My partner')
).then(() => {
  console.log('Done!');
});
0 голосов
/ 02 апреля 2019

Обещания скорее используются, когда вы хотите получить некоторые данные из внешнего источника (например, REST). Однако, если вы действительно хотите это сделать, создатель действия должен вернуть функцию:

export const updateActivePage = (activePage) => {
  return (dispatch) => {
    return dispatch ({
      type: UPDATE_ACTIVEPAGE,
      payload: activePage
    });
  }
}

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

Если вы хотите реагировать на изменения состояния редукса, ваш компонент должен наблюдать за состоянием (используя mapStateToProps), и вы можете обрабатывать изменения в методе componentWillUpdate.

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