javascript - 带有 redux-saga 的异步请求
问题描述
我正在学习 redux-saga,到目前为止,我创建了具有工作本地应用程序状态(加号和减号按钮)的基本项目,但是异步部分存在问题。
基本上 redux 在请求操作期间卡住了。
链接做codesandbox: https ://codesandbox.io/s/recursing-dirac-vxy1s
这是不按@Clarity 建议的那样工作的部分代码:
动作.js
export const CLICKER_GET_POST_REQUEST = "CLICKER_GET_POST_REQUEST";
export const CLICKER_GET_POST_SUCCESS = "CLICKER_GET_POST_SUCCESS";
export const CLICKER_GET_POST_FAILED = "CLICKER_GET_POST_FAILED";
export const clickerGetPostRequest = () => ({
type: CLICKER_GET_POST_REQUEST
});
export const clickerGetPostSuccess = payload => ({
type: CLICKER_GET_POST_SUCCESS,
payload
});
export const clickerGetPostFailed = payload => ({
type: CLICKER_GET_POST_FAILED,
payload
});
减速器.js
const initialState = {
post: {},
isLoading: false,
isError: false
};
export default function ClickerReducer(state = initialState, action) {
switch (action.type) {
case CLICKER_GET_POST_REQUEST:
return {
...state,
isLoading: true
};
case CLICKER_GET_POST_SUCCESS:
return {
...state,
isLoading: false,
post: action.payload
};
case CLICKER_GET_POST_FAILED:
return {
...state,
isLoading: false,
isError: true
};
default:
return state;
}
}
传奇.js
export default function*() {
yield [
takeEvery(CLICKER_GET_POST_REQUEST, fetchPost)
];
}
function* fetchPost() {
try {
const response = yield call(
fetch,
"https://jsonplaceholder.typicode.com/posts/1"
);
const data = yield response.json();
yield put(clickerGetPostSuccess(data));
} catch (err) {
yield put(clickerGetPostFailed());
}
}
最后,“clickerGetPostRequest”被执行,但“clickerGetPostSuccess”和“clickerGetPostFailed”都不会运行。
解决方案
当你产生一个数组时,你需要将数组包装在all
:
import { all } from "redux-saga/effects";
export default function*() {
yield all([
takeEvery(CLICKER_GET_POST_REQUEST, fetchPost)
]);
}
这同样适用于rootSaga.js
.
推荐阅读
- python - Groupby 名称用所有列中的最大值替换值 pandas
- swift - MeasurementFormatter 删除零并返回为 Double
- java - 调用 httpclient.execute(httpPost) 时出现 sslhandshake 问题
- django - SerializerMethodField 未显示 - Django Rest Framework
- teradata - 如何仅获取不匹配的数据
- powerbi - LOOP 在 M Query 中查找值
- business-intelligence - BusinessObjects 如何解析 Oracle 数据库上的日期字符串
- json - 在嵌套的 JSON 数组中找到所有不同的值
- redis - Redis 4.0.14 AOF 和 RDB 恢复
- python-3.x - 熊猫:如何将某些列的内容视为列表