TypeError:Cannotreadpropertiesofundefined(reading'push' Sebagai seorang pemula, saya amat menghargai bantuan daripada pakar. AddContacts.jsimportReact,{Component}from"r"> Isu apabila mengubah hala secara atur cara ke laluan dalam React Router v6-Soal Jawab Rangkaian PHP Cina
Isu apabila mengubah hala secara atur cara ke laluan dalam React Router v6
P粉693126115
P粉693126115 2023-10-30 19:35:07
0
2
503

Saya ingin melakukan navigasi pada tindakan pengguna tertentu, seperti padaSubmit butang. Dengan mengandaikan pengguna mengklik butang "Tambah Kenalan", saya mahu penghala tindak balas untuk mengubah hala dalam halaman utama "/". Pada masa ini saya menghadapi masalah ini --> TypeError: Tidak boleh membaca sifat yang tidak ditentukan (membaca 'push' Sebagai seorang pemula, saya amat menghargai bantuan daripada pakar).

AddContacts.js

import React, { Component } from "react"; import { Consumer } from "../../context"; import TextInputGroup from "../layout/TextInputGroup"; import { v4 as uuidv4 } from "uuid"; import { useNavigate } from "react-router-dom"; class AddContacts extends Component { state = { name: "", email: "", phone: "", errors: {}, }; onSubmit = (dispatch, e) => { e.preventDefault(); const { name, email, phone } = this.state; //Check for errors if (name === "") { this.setState({ errors: { name: "Name is required" } }); return; } if (email === "") { this.setState({ errors: { email: "Email is required" } }); return; } if (phone === "") { this.setState({ errors: { phone: "Phone is required" } }); return; } const newContact = { id: uuidv4(), name, email, phone, }; dispatch({ type: "ADD_CONTACT", payload: newContact }); this.setState({ name: "", email: "", phone: "", errors: {}, }); this.props.navigate.push("/"); }; onChange = (e) => this.setState({ [e.target.name]: e.target.value }); render() { const { name, email, phone, errors } = this.state; return (  {(value) => { const { dispatch } = value; return ( 
Add Contacts
); }}
); } } export default AddContacts;

Ini ialah fail App.js

import React, { Component } from "react"; import { BrowserRouter, Routes, Route, Link } from "react-router-dom"; import Contacts from "./components/contacts/Contacts"; import Header from "./components/layout/Header"; import AddContacts from "./components/contacts/AddContacts"; import About from "./components/pages/About"; import { Provider } from "./context"; import "bootstrap/dist/css/bootstrap.min.css"; import "./App.css"; function App() { return (   
} />{" "} } />{" "} } />{" "} {" "}
{" "}
{" "}
{" "}
); } export default App;


P粉693126115
P粉693126115

membalas semua (2)
P粉905144514

Cara mengubah hala dalam React Router v6

import { useNavigate } from "react-router-dom"; const navigate = useNavigate(); const handleClick = () => { navigate("/dashboard"); };
    P粉384244473

    Soalan

    Ini kerana anda cuba menavigasi darinavigateharta yang tidak wujud, ia tidak ditentukan.

    this.props.navigate.push("/");
    Cangkuk

    useNavigatehanya serasi dengan komponen fungsi, jadi jika anda mahu/perlu menggunakanuseNavigate挂钩仅与函数组件兼容,因此如果您想要/需要将navigate与类组件一起使用,则必须转换AddContacts code> 到函数组件,或者滚动您自己的自定义withRouter高阶组件来注入“路由道具”,例如来自react-router-dom 的withRouterHOCdengan komponen kelas, anda perlu menukarAddContactskepada komponen fungsi, atau gulungkan komponen tertib

    tersuai anda sendiri untuk menyuntik "perangkap penghalaan", seperti

    HOC v5.x daripadareact-router-dom melakukannya.

    PenyelesaianwithRouter

    Saya tidak akan membincangkan cara menukar komponen kelas kepada komponen fungsi. Berikut ialah contoh adat

    HOC:AddContacts

    const withRouter = WrappedComponent => props => { const navigate = useNavigate(); // etc... other react-router-dom v6 hooks return (  ); };
    Dan gunakan komponen

    hiasan HOC baharu.navigate属性(以及您设置的任何其他属性)传递给装饰组件,并且this.navigate

    export default withRouter(AddContacts);
    Harta

    (dan mana-mana sifat lain yang anda tetapkan) kini akan diserahkan kepada komponen yang dihias danthis.navigatekini akan ditakrifkan.history对象。navigate是一个函数而不是一个对象。要使用您调用函数并传递 1 或 2 个参数,第一个是目标路径,第二个是带有replace和/或state

    Selain itu, API navigasi berubah daripada v5 kepada v6 dan tidak lagi menggunakan objek langsung sejarah.

    ialah fungsi bukan objek. Untuk menggunakan anda memanggil fungsi dan lulus 1 atau 2 argumen, yang pertama ialah laluan sasaran dan yang kedua ialah objek/nilai "pilihan" pilihan.

    Sekarang navigasi adalah seperti berikut:
    this.props.navigate("/");
      Muat turun terkini
      Lagi>
      kesan web
      Kod sumber laman web
      Bahan laman web
      Templat hujung hadapan
      Tentang kita Penafian Sitemap
      Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!