【问题标题】:Redux-saga put method doesn't trigger reducerRedux-saga put 方法不会触发 reducer
【发布时间】:2019-10-12 11:13:24
【问题描述】:

我试图通过在我的 redux saga 中调用 put 方法来触发 redux reducer,但它不会被触发,即使我返回应该在我的 reducer 中捕获的相同操作类型。

这是我的传奇:

export function* registrationSaga(action) {
  try {
    const response = yield call(registerUser, action.payload);
    console.log(response)
    yield put({ type: REGISTER_USER_SUCCESS, response })
  } catch(error) {
    yield put({ type: REGISTER_USER_ERROR, error });
  }
}

这是我的减速器:

export const registrationReducer = (state = {}, action) => {
let response = action.response;

switch(action.type) {
  case REGISTER_USER_SUCCESS: {
    console.log("successful registration")
    return { ...state, registration_success: response.success, registration_message: response.message };
  }

  case REGISTER_USER_ERROR:
    return { ...state, registration_success: response.success, registration_message: response.message };
  default:
    return state;
}
}

我希望在我的控制台中看到“成功注册”,并在我的组件中获得该响应作为道具,但这并没有发生。什么应该导致这个问题?

这是我的 rootReducer 和存储:

const rootReducer = () => combineReducers({
    registrationReducer,
    todoReducer
})

export default rootReducer;

并存储:

const sagaMiddleware = createSagaMiddleware()

export const store = createStore(
    rootReducer,
    applyMiddleware(sagaMiddleware)
);

sagaMiddleware.run(rootSaga)

【问题讨论】:

    标签: javascript reactjs redux saga


    【解决方案1】:

    rootReducer不应该是调用combineReducers函数,而应该是combineReducers的返回值:

    const rootReducer = combineReducers({
        registrationReducer,
        todoReducer,
    });
    
    export default rootReducer;
    

    Redux API

    【讨论】:

      猜你喜欢
      • 2019-01-18
      • 2016-08-16
      • 1970-01-01
      • 2018-11-03
      • 2021-12-09
      • 2021-05-09
      • 2020-01-15
      • 2018-08-09
      • 1970-01-01
      相关资源
      最近更新 更多