开发者问题收集

TypeError:无法读取 React js 中未定义的属性“type”

2020-07-29
2403

我正在使用 jumbo 4.1.1 模板。我得到了响应,但出现了此错误。 我的代码如下: authAction.js:

...
export const userSignIn = (user) => {
// const {email, password} = user;
console.log(user)
axios.post(base_url +'login', user)
.then(response=> {
    console.log(response.data)
    return {
        type: SIGNIN_USER,
        payload: user
    };
})    
};

但是当我运行项目时,出现了错误 TypeError: Cannot read property 'type' of undefined enter image description here

2个回答

我相信那是因为你没有正确地分派动作。

你使用 thunk 了吗?

如果你使用 Redux 并进行异步调用,则应该返回 dispatch。

const userSignup = (signupData) => {
  return async (dispatch) => {
    try {
      let res = await axios.post(`${url}/user/`, { user: signupData });
      dispatch({
        type: "FETCH_CURRENT_USER_SUCCESS",
        payload: res.data.user,
      });

      return true;
    } catch (error) {
      console.log(
        "%c CATCH in userSignup ",
        "background: red; color: #bada55",
        error
      );
    }
  };
};

请注意,我在第二行返回了一个以 dispatch 作为参数的函数。然后使用 dispatch (第 4 行)分派动作的类型和有效负载。

此外,我最后从函数 userSignUp 返回了一些内容,因此函数 userSignUp 的调用者会得到一些响应。

如果您不理解上述任何内容,请告诉我。

Anas Ansari
2020-07-29

您可以从此处使用 async + await 中受益。

例如:

export const userSignIn = async (user) => {
    try {
        // const {email, password} = user;
        console.log(user);
        const data = await axios.post(base_url +'login', user);     
        console.log(data);
        return {
            type: SIGNIN_USER,
            payload: user,
        }; 
    } catch (error) {
        console.log(error);
        // return an error action...?
        return {
            type: ERROR,
            payload: error,
        };
    }
};
segFault
2020-07-29