我加入了一个bigmedium项目,我很难创建我的第一个redux-saga-action东西,这将是一个很大的代码,因为他们正在创建很多文件,使事情可读。
所以我在我的组件DidMount中调用我的动作,动作被调用是因为我有警报。
export const fetchDataRequest = () => {
alert("actions data");
return ({
type: FETCH_DATA_REQUEST
})
};
export const fetchDataSuccess = data => ({
type: FETCH_DATA_SUCCESS,
payload: {
data,
},
});
这是我的历史传奇:(当我调用这个类型的action时,函数得到执行)。
export default function* dataSaga() {
// their takeEverymethods
yield takeEvery(FETCH_DATA_REQUEST, fetchData);
}
这就是必须调用的内容:(我正试图用json文件中的数据填充我的状态:mock)。
export default function* fetchTronconsOfCircuit() {
try {
// Cal to api
const client = yield call(RedClient);
const data = yield call(client.fetchSomething);
// mock
const history = data === "" ? "" : fakeDataFromMock;
console.log("history : ");
console.log(history);
if (isNilOrEmpty(history)) return null;
yield put(fetchDataSuccess({ data: history }));
} catch (e) {
yield put(addErr(e));
}
}
这就是我的根根传奇 。
export default function* sagas() {
// many other spawn(somethingSaga);
yield spawn(historySaga);
}
这里是减速器。
const fetchDataSuccess = curry(({ data }, state) => ({
...state,
myData: data,
}));
const HistoryReducer = createSwitchReducer(initialState, [
[FETCH_DATA_SUCCESS, fetchDataSuccess],
]);
createSwitchReducer这个方法是由团队创建的,目的是为了轻松地创建一个reducer,而不是创建一个switch,然后在params中传递action.type等等,他们的方法工作得很好,我也做了他们为别人做的事情。
我是不是错过了什么?
我觉得我做的一切都对,但是saga没有被调用,这意味着这是一个小问题,动作和saga之间的连接是一个常见的问题,我只是不知道我的问题在哪里。
我没有在控制台中看到 console.log 消息,我在 try-catch 之前加了一个 alert,但也没有得到什么,但 action 里面的 alert 被调用了。
任何帮助都会非常非常感激。
yield takeEvery(FETCH_DATA_REQUEST, fetchData);
应该是
yield takeEvery(FETCH_DATA_REQUEST, fetchTronconsOfCircuit);