reactjs - 单击按钮时如何在传奇函数上运行调度?
问题描述
我有一个用例,我可能会在游戏后期调度动作(传奇)。我有一个应用程序,用户填写表格,稍后当用户单击提交时,将调用 saga 操作,通过该操作我将从 api 获得响应。但我还有另一个在应用程序初始化时运行的工人传奇。不知何故只初始化工作其他叉子不起作用 -
传奇/applicationSaga.js
export function* initialize() {
yield call(getAppInfo);
}
export function* getAppInfo() {
try {
const appInfo = (yield call(
AppApi.getAppInfo
)).data;
} catch (e) {
throw new Error(e);
}
}
export function* submitDecision({payload}) {
try {
const submitDecision = yield call(AppApi.submitDecision, payload)
} catch (e) {
throw new Error(e);
}
}
export function* applicationSaga() {
yield fork(takeEvery, ActionTypes.INITIALIZATION_REQUESTED, initialize);
yield fork(takeEvery, ActionTypes.SUBMIT_DECISION, submitDecision)
}
传奇/index.js
import { applicationSaga, initialize } from "./applicationSaga";
export default function* rootSaga() {
yield all([applicationSaga(), initialize()]);
}
解决方案
这是在 Saga 中调用生成器函数的方法。为了使应用程序与数据同步,必须正确实现 Store、Actions 和 reducer。请查看如何在 `onClick` 事件中调用 Redux Saga 操作?这个。
你的JS.js
import store from "YOUR_LOCATION/store";
submit = () => {
store.dispatch({type: "SUBMIT", payload: YOUR_PAYLOAD});
}
<button onClick={this.submit}>Submit</button>
SAGA.js
import { takeLatest } from "redux-saga/effects";
export const watchSubmit = function* () {
yield takeLatest("SUBMIT", workerSubmit);
};
function* workerSubmit(action) {
try {
// Your code
} catch {
message.error("Failed")
}
}
推荐阅读
- jquery - 如何在firebase数据库中使用onclick删除项目?
- php - Apache Server 未使用 PHP 脚本返回 HTTP 错误代码
- python - 读取 Excel 分段数据,转换,然后输出为数据库的原始格式
- reactjs - React.JS 处理未定义道具的最佳方法是什么
- javascript - 如何访问此 PHP 对象中的信息?
- perl - Perl 正确读取逗号分隔值的配置值
- php - Wordpress - 为前 4 个帖子设置自定义 CSS 类,并包装 2 个第一个帖子
- c++ - 在qt中执行自己的sql函数
- symfony - (Symfony 4)期望存储库类的函数,当我将其设置为期望实体类时
- java - 如何使用 ObjectMapper 序列化/反序列化 LogEvent 对象?