我对整个React env很新,我试图使用redux-saga库为Google Api创建一个GET请求。
我有点遗失两件事。第一个问题是我的传奇函数被一次又一次地调用(不知道为什么)。
第二件事是如何将数据正确传递给reducer。
这是我的传奇:
function* watchAutoCompleteFetch() {
yield takeLatest(UPDATE_ZIP_AUTOCOMPLETE, requestAutoComplete);
}
function requestAutoCompleteApi() {
return fetch(
'some-url-here'
).then((response) => response.json())
.then((json) => json)
.catch((e) => {
put({type: "AUTOCOMPLETE_ZIP_FETCH_FAILED", message: e.message});
});
}
function* requestAutoComplete() {
const data = call(requestAutoCompleteApi);
yield put(updateZipAutoCompleteAction(data));
}
和减速机功能:
const updateZipAutoComplete = (state, data) => {
debugger;
return state;
};
在reducer中,我将数据作为redux-saga中的某种调用对象,而不是promise,也不是数据。
任何想法我做错了什么?
答案 0 :(得分:1)
所以,事实证明确实存在两个问题。一个是我缺少yield关键字,第二个是我总是调用相同的reducer,它再次触发了dispatch事件,它进入循环并永远运行。
实际解决方案如下所示:
function* watchAutoCompleteFetch() {
yield takeLatest(UPDATE_ZIP_AUTOCOMPLETE, requestAutoComplete);
}
function requestAutoCompleteApi() {
return fetch(
'some-url-here'
).then((response) => response.json())
.catch((e) => {
console.log(e)
});
}
function* requestAutoComplete() {
const data = yield call(requestAutoCompleteApi);
if(data.status ==="OK") {
yield put(updateZipAutoCompleteSucceedAction(data));
} else {
yield put(updateZipAutoCompleteFailedAction(data));
}
}