Rumah > Soal Jawab > teks badan
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 ( <Consumer> {(value) => { const { dispatch } = value; return ( <div className="card mb-3"> <div className="card-header">Add Contacts</div> <div className="card-body"> <form onSubmit={this.onSubmit.bind(this, dispatch)}> <TextInputGroup label="Name" name="name" placeholder="Enter Name..." value={name} onChange={this.onChange} error={errors.name} /> <TextInputGroup label="Email" name="email" type="email" placeholder="Enter Email..." value={email} onChange={this.onChange} error={errors.email} /> <TextInputGroup label="Phone" name="phone" placeholder="Enter Phone..." value={phone} onChange={this.onChange} error={errors.phone} /> <input type="submit" value="Add Contact" className="btn btn-light btn-block mt-3" /> </form> </div> </div> ); }} </Consumer> ); } } 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 ( <Provider> <BrowserRouter> <div className="App"> <Header branding="Contact manager" /> <div className="container"> <Routes> <Route path="/" element={<Contacts />} />{" "} <Route path="/contact/add/*" element={<AddContacts />} />{" "} <Route path="about/*" element={<About />} />{" "} </Routes>{" "} </div>{" "} </div>{" "} </BrowserRouter>{" "} </Provider> ); } export default App;
P粉9051445142023-10-31 19:13:17
Cara mengubah hala dalam React Router v6
import { useNavigate } from "react-router-dom"; const navigate = useNavigate(); const handleClick = () => { navigate("/dashboard"); };
P粉3842444732023-10-31 13:19:10
Ini kerana anda cuba menavigasi dari navigate
harta yang tidak wujud, ia tidak ditentukan.
this.props.navigate.push("/");Cangkuk
useNavigate
hanya serasi dengan komponen fungsi, jadi jika anda mahu/perlu menggunakan useNavigate
挂钩仅与函数组件兼容,因此如果您想要/需要将 navigate
与类组件一起使用,则必须转换 AddContacts code> 到函数组件,或者滚动您自己的自定义
withRouter
高阶组件来注入“路由道具”,例如来自 react-router-dom 的
dengan komponen kelas, anda perlu menukar withRouter
HOC AddContacts
kepada komponen fungsi, atau gulungkan komponen tertib
react-router-dom melakukannya.
PenyelesaianwithRouter
HOC: AddContacts
const withRouter = WrappedComponent => props => { const navigate = useNavigate(); // etc... other react-router-dom v6 hooks return ( <WrappedComponent {...props} navigate={navigate} // etc... /> ); };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 dan this.navigate
kini akan ditakrifkan. history
对象。 navigate
是一个函数而不是一个对象。要使用您调用函数并传递 1 或 2 个参数,第一个是目标路径,第二个是带有 replace
和/或 state
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("/");