捕获错误并放入组件 ReactJS

Catch error and put inside a component ReactJS

我有一个问题,这个问题是从我的 try catch 中获取错误并将此消息错误传递给我的自定义警报组件。

下面是我的代码:

 export const Register = () => { 
   const dispatch = useDispatch(); 
   
   const [openError, setOpenError] = useState(false);

   const AlertError = openError ? (
    <Dialog open={openError}>
      <AlertCard
        open={openError}
        handleClose={handleCloseError}
        borderTop="1vh solid red"
        color="black"
        severity="error"
        title="Cadastro falhou"
        description='message' //put here message error
      />
    </Dialog>
  ) : (
    ""
  );

 const formik = useFormik({
    initialValues: {
      email: "",
      password: "",
      first_name: "",
      last_name: "",
      confirmPassword: "",
      newsletter: "",
    },
    validationSchema: validationSchema,
    onSubmit: async (values) => {
      setIsLoading(true)
      dispatch(signupUserPending());
      dispatch(requestConfirmEmailPending());
      try {
        if (document.getElementById("checkbox").checked) {
          values.newsletter = "on";
        }
        const singUpRes = await signup(values);
        dispatch(signupUserSuccess(singUpRes));
        dispatch(getUserSuccess(singUpRes));
        dispatch(getTokenSuccess(singUpRes));

        const confirmEmailRes = await requestConfirmEmail(singUpRes.user.email);
        dispatch(requestConfirmEmailSuccess(confirmEmailRes));
        setOpenSuccess(true);
        navigate("/confirm-token");

      } catch (err) {
        console.log(err.message); //need take this message error
        dispatch(signupUserFailure(err));
        dispatch(requestConfirmEmailFailure(err));
        setIsLoading(false);
        setOpenError(true);
      }
    },
  });

  return ({AlertError}...rest of code)
} 

我需要捕获来自后端的消息错误,并将此错误放入我的自定义警报错误的道具描述中。但我不知道该怎么做。我试着做了几个小时,但没能成功。

一般来说,只要你想改变要在组件中呈现的局部值,你就会更新 React 状态。

你看,你已经在使用 useState 钩子来控制 AlertError 是否显示 [openError, setOpenError],你应该只需要对错误消息做同样的事情.

此外,您可能希望使用错误消息本身来控制警报的呈现。

这里是我的意思的一个片段:

export const Register = () => {
  const [errorMessage, setErrorMessage] = useState("");
  const formik = useFormik({
    onSubmit: async (values) => {
      try {
        await signup(values);
      } catch (err) {
        setErrorMessage(err.message);
      }
    },
  });
  return <AlertError open={!!errorMessage} description={errorMessage} />;
};

const AlertError = ({ open, description, ...rest }) => (
  <Dialog open={open}>
    <AlertCard open={open} description={description} {...rest} />
  </Dialog>
);