我正在使用react-router-dom v6这个代码生成101以上.请帮我解决错误…102工作正常.我认为这个错误来自fronted…103..

import React, { Fragment, useState, useEffect } from "react";
import "./ResetPassword.css";
import Loader from "../layout/Loader/Loader";
import { useDispatch, useSelector } from "react-redux";
import { clearErrors, resetPassword } from "../../actions/userAction";
import { useAlert } from "react-alert";
import MetaData from "../layout/MetaData";
import LockOpenIcon from "@material-ui/icons/LockOpen";
import LockIcon from "@material-ui/icons/Lock";

const ResetPassword = ({ history, match }) => {
  const dispatch = useDispatch();
  const alert = useAlert();

  const { error, success, loading } = useSelector(
    (state) => state.forgotPassword
  );

  const [password, setPassword] = useState("");
  const [confirmPassword, setConfirmPassword] = useState("");

  const resetPasswordSubmit = (e) => {
    e.preventDefault();

    const myForm = new FormData();

    myForm.set("password", password);
    myForm.set("confirmPassword", confirmPassword);

    dispatch(resetPassword(match.params.token, myForm));
  };

  useEffect(() => {
    if (error) {
      alert.error(error);
      dispatch(clearErrors());
    }

    if (success) {
      alert.success("Password Updated Successfully");

      history.push("/login");
    }
  }, [dispatch, error, alert, history, success]);

  return (
    <Fragment>
      {loading ? (
        <Loader />
      ) : (
        <Fragment>
          <MetaData title="Change Password" />
          <div className="resetPasswordContainer">
            <div className="resetPasswordBox">
              <h2 className="resetPasswordHeading">Update Profile</h2>

              <form
                className="resetPasswordForm"
                onSubmit={resetPasswordSubmit}
              >
                <div>
                  <LockOpenIcon />
                  <input
                    type="password"
                    placeholder="New Password"
                    required
                    value={password}
                    onChange={(e) => setPassword(e.target.value)}
                  />
                </div>
                <div className="loginPassword">
                  <LockIcon />
                  <input
                    type="password"
                    placeholder="Confirm Password"
                    required
                    value={confirmPassword}
                    onChange={(e) => setConfirmPassword(e.target.value)}
                  />
                </div>
                <input
                  type="submit"
                  value="Update"
                  className="resetPasswordBtn"
                />
              </form>
            </div>
          </div>
        </Fragment>
      )}
    </Fragment>
  );
};

export default ResetPassword;

后端代码在这里

export const resetPassword = (token, passwords) => async (dispatch) => {
  try {
    dispatch({ type: RESET_PASSWORD_REQUEST });

    const config = { headers: { "Content-Type": "application/json" } };

    const { data } = await axios.put(
      `/api/v1/password/reset/${token}`,
      passwords,
      config
    );

    dispatch({ type: RESET_PASSWORD_SUCCESS, payload: data.success });
  } catch (error) {
    dispatch({
      type: RESET_PASSWORD_FAIL,
      payload: error.response.data.message,
    });
  }
};

Thank you

推荐答案

react-router-dom@6年,Route组分API发生了显著变化.不再有任何路由props (i.e. no 102 or 103 props),全部由react 挂钩代替.history对象通过useNavigate钩子被navigate函数替换,路由路径参数可以通过useParams钩子访问.

例子:

import { useNavigate, useParams } from 'react-router-dom';

const ResetPassword = () => {
  const navigate = useNavigate(); // <-- access navigate function
  const { token } = useParams(); // <-- access token path parameter

  ...

  const resetPasswordSubmit = (e) => {
    ...

    dispatch(resetPassword(token, myForm)); // <-- use token param here
  };

  useEffect(() => {
    ...

    if (success) {
      alert.success("Password Updated Successfully");

      navigate("/login"); // <-- call navigate here
    }
  }, [dispatch, error, alert, navigate, success]);

Reactjs相关问答推荐

迁移到React Router Dom v6后,我是否错误地使用了Link组件?

更改购物车中的产品数量后,PayPal Reaction/Next JS按钮未更新

使用Reaction-Hook-Form时未激发React.js onBlur事件

无法将react 路由状态从路由传递给子组件

FireBase Reaction Native-在呈现视图之前等待响应

更改滑块标记的文本 colored颜色 ./Reaction/MUI 5

通过createRoot创建的React元素无法调用Provider值

如何优化 React 应用程序的性能?

是否可以直接在 jsx 标签上使用 CSS 定义的 colored颜色 ?

解决在React测试库中的act()警告

使用jest如何覆盖对象的模拟?我正在使用`jest.mock()`来模拟对象,并希望 for each 测试用例覆盖模拟.

如何更新redux状态存在的输入框

在 React-Select 中显示多值的倒序

如何在使用 React Router v6 将当前页面的状态传递给上一页的同时导航到上一页?

有没有办法在用户离开页面时防止输入模糊?

在 Nextjs13 应用程序目录中呈现从 supabase 获取的数据

Redux Toolkit 配置,是否适用于全栈应用程序?

Material UI v5.11 - Prop sx 在响应式中写了两次

将 ref 转发到所有页面(路由组件)只是为了将其应用于
并具有跳过导航链接(按钮).有没有更好的办法?

多次响应获取发送请求