簡體   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