繁体   English   中英

使用 redux-saga 提交表单

[英]Form submission with redux-saga

我有一个反应应用程序。 Firebase 在后端。 Redux-saga 用于 state 管理。 但是我对表单提交的调度仅在用户表单组件的初始渲染时执行一次。 我有一个提交处理程序:

 const formSubmitHandler = e => {
    e.preventDefault();
    dispatch({ type: 'REGISTER_USER', email, password });
  }

我有我的传奇

export function* registerUserHandler({email, password}) {
  try {
    const user = yield call(apiRequests.registerUser(email, password));
    yield put({ type: 'REG_USER', user })
  } catch(e) {
    console.log(e)
  }
} 

export function* registerNewWatcher() {
  yield takeLatest('REGISTER_USER', registerUserHandler);
}

这给了我未定义的 email 和密码。 更准确地说,不能从未定义中解构。 我将在观察者传奇中将什么传递给 registerUserHandler?

这个 saga 中的错误也会导致我的 rootSaga 中的其他 saga 失败。

根传奇

export default function* rootSaga() {
  yield all([
    // fork(fetchUserHandler),
    fork(registerUserHandler)
  ]) 
}

试试这个,我认为你得到了错误,因为你使用了错误的语法。

 const formSubmitHandler = e => {
    e.preventDefault();
    const params = { email, password }
    dispatch({ type: 'REGISTER_USER', params });
  } 

如果有人偶然发现这个问题,事实证明这是您如何将 arguments 传递给 apiRequest function 的问题。 你不会说:

const user = yield call(apiRequests.registerUser(email, password));

没有必要使用调用效果,尽管在解决方案 2 中可以看到。

解决方案 1

const user = yield apiRequests.registerUser(email, password));

解决方案 2

 const user = yield call(apiRequests.registerUser, email, password);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM