简体   繁体   English

使用 redux-saga 提交表单

[英]Form submission with redux-saga

I have a react app.我有一个反应应用程序。 Firebase on the backend. Firebase 在后端。 Redux-saga for state management. Redux-saga 用于 state 管理。 But my dispatch on form submit executes only once on initial render of UserForm comopnent.但是我对表单提交的调度仅在用户表单组件的初始渲染时执行一次。 I have a submit handler:我有一个提交处理程序:

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

I have my saga我有我的传奇

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);
}

This is giving me undefined for email and password.这给了我未定义的 email 和密码。 More correctly, cannot destructure from undefined.更准确地说,不能从未定义中解构。 What will I passto registerUserHandler in the watcher saga?我将在观察者传奇中将什么传递给 registerUserHandler?

The error in this saga also causes other sagas in my rootSaga to fail.这个 saga 中的错误也会导致我的 rootSaga 中的其他 saga 失败。

root saga根传奇

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

try this, I think u got the error because you are using the wrong syntax.试试这个,我认为你得到了错误,因为你使用了错误的语法。

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

In case somone stumbles into this question it turns out it is the matter of how you pass arguments to the apiRequest function.如果有人偶然发现这个问题,事实证明这是您如何将 arguments 传递给 apiRequest function 的问题。 You will not say:你不会说:

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

It is not necessary to use the call effect, although it is possible as seen in solution 2.没有必要使用调用效果,尽管在解决方案 2 中可以看到。

Solution 1解决方案 1

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

Solution 2解决方案 2

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

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

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