Редуктор не вызывается после отправки действия - PullRequest
0 голосов
/ 26 августа 2018

Я пытаюсь начать реагировать / редуцировать , используя шаблонный код из http://reactboilerplate.com, и до сих пор он работал отлично.

Я хочу обновить свое состояниеиз контейнера, и я отправляю вызов следующим образом:

// This is the method that should tigger the action
updateMoneyValue(newValue);

...

// Here I hope I set up everything correctly...
function mapDispatchToProps(dispatch) {
  return {
    updateMoneyValue: newMoneyValue =>
      dispatch(updateMoneyValue(newMoneyValue)),
  };
}
const withConnect = connect(
  mapStateToProps,
  mapDispatchToProps,
);

const withReducer = injectReducer({ key: 'counterPage', reducer });
const withSaga = injectSaga({ key: 'counterPage', saga });

export default compose(
  withReducer,
  withSaga,
  withConnect,
)(CounterPage);

Я думал, что dispatch(updateMoneyValue(newMoneyValue)) должен на самом деле отправить действие и заставить его попасть в редуктор.Но на самом деле происходит следующее: когда я выполняю вызов в первой строке, моё действие срабатывает:

export function updateMoneyValue(moneyValue) {
  console.log('Action has fired.');
  return {
    type: UPDATE_MONEY_VALUE,
    moneyValue,
  };
}

Но редуктор никогда не запускается:

function counterPageReducer(state = initialState, action) {
  switch (action.type) {
    case UPDATE_MONEY_VALUE:
      console.log('Reducer was called.');
      state.set('moneyValue', action.moneyValue);
      return state;
    default:
      return state;
  }
}

Я пытался найтирешение, но я действительно застрял на этом и был бы признателен за любую помощь!

С наилучшими пожеланиями, Аяка.

Ответы [ 3 ]

0 голосов
/ 26 августа 2018

Когда вы отображаете состояние или отправляете, ваш метод становится доступным в подпорках.

// This is the method that should tigger the action
this.props.updateMoneyValue(newValue);
0 голосов
/ 26 августа 2018

Когда вы звоните updateMoneyValue(newValue), вы не отправляете действие, вы напрямую вызываете создателя действия.

Чтобы пройти через Redux, вам нужно позвонить this.props.updateMoneyValue(newValue)

0 голосов
/ 26 августа 2018

изменение:

state.set('moneyValue', action.moneyValue);

до:

state = state.set('moneyValue', action.moneyValue);

edit: таким образом, вы «устанавливаете новое состояние», без state = вы изменяете состояние, но не используете измененное состояние для последующего возврата

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