TypeError:Cannotreadpropertiesofundefined(reading'push' Sebagai seorang pemula, saya amat menghargai bantuan daripada pakar. AddContacts.jsimportReact,{Component}from"r">
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;
Cara mengubah hala dalam React Router v6
import { useNavigate } from "react-router-dom"; const navigate = useNavigate(); const handleClick = () => { navigate("/dashboard"); };Soalan
Ini kerana anda cuba menavigasi dari
navigateharta yang tidak wujud, ia tidak ditentukan.this.props.navigate.push("/");Cangkuk
tersuai anda sendiri untuk menyuntik "perangkap penghalaan", sepertiuseNavigatehanya serasi dengan komponen fungsi, jadi jika anda mahu/perlu menggunakanuseNavigate挂钩仅与函数组件兼容,因此如果您想要/需要将navigate与类组件一起使用,则必须转换AddContacts code> 到函数组件,或者滚动您自己的自定义withRouter高阶组件来注入“路由道具”,例如来自react-router-dom 的dengan komponen kelas, anda perlu menukarwithRouterHOCAddContactskepada komponen fungsi, atau gulungkan komponen tertibHOC v5.x daripada
react-router-dom melakukannya.Penyelesaian
Saya tidak akan membincangkan cara menukar komponen kelas kepada komponen fungsi. Berikut ialah contoh adatwithRouterHOC:
AddContactsconst withRouter = WrappedComponent => props => { const navigate = useNavigate(); // etc... other react-router-dom v6 hooks return ( ); };Dan gunakan komponenhiasan HOC baharu.
Hartanavigate属性(以及您设置的任何其他属性)传递给装饰组件,并且this.navigate(dan mana-mana sifat lain yang anda tetapkan) kini akan diserahkan kepada komponen yang dihias dan
Selain itu, API navigasi berubah daripada v5 kepada v6 dan tidak lagi menggunakan objek langsungthis.navigatekini akan ditakrifkan.history对象。navigate是一个函数而不是一个对象。要使用您调用函数并传递 1 或 2 个参数,第一个是目标路径,第二个是带有replace和/或statesejarah.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("/");