จริงๆแล้วมันขึ้นอยู่กับกรณีการใช้งานของคุณ
1) คุณต้องการปกป้องเส้นทางของคุณจากผู้ใช้ที่ไม่ได้รับอนุญาต
หากเป็นเช่นนั้นคุณสามารถใช้ส่วนประกอบที่เรียก<Redirect />
และสามารถใช้ตรรกะต่อไปนี้:
import React from 'react'
import { Redirect } from 'react-router-dom'
const ProtectedComponent = () => {
if (authFails)
return <Redirect to='/login' />
}
return <div> My Protected Component </div>
}
โปรดทราบว่าหากคุณต้องการ<Redirect />
ทำงานตามที่คุณคาดหวังคุณควรวางไว้ในวิธีการเรนเดอร์ของคอมโพเนนต์เพื่อให้ถือว่าเป็นองค์ประกอบ DOM ในที่สุดมิฉะนั้นจะไม่ทำงาน
2) คุณต้องการเปลี่ยนเส้นทางหลังจากดำเนินการบางอย่าง (สมมติว่าหลังจากสร้างรายการ)
ในกรณีนี้คุณสามารถใช้ประวัติ:
myFunction() {
addSomeStuff(data).then(() => {
this.props.history.push('/path')
}).catch((error) => {
console.log(error)
})
หรือ
myFunction() {
addSomeStuff()
this.props.history.push('/path')
}
เพื่อที่จะได้เข้าถึงประวัติการคุณสามารถห่อส่วนประกอบของคุณด้วย HOC withRouter
ที่เรียกว่า เมื่อคุณรวมส่วนประกอบของคุณเข้าด้วยกันมันจะผ่านmatch
location
และhistory
อุปกรณ์ประกอบฉาก สำหรับรายละเอียดเพิ่มเติมโปรดดูเอกสารอย่างเป็นทางการสำหรับ withRouter
หากองค์ประกอบของคุณเป็นลูกของ<Route />
องค์ประกอบคือถ้ามันเป็นสิ่งที่ชอบ<Route path='/path' component={myComponent} />
คุณจะได้ไม่ต้องห่อส่วนประกอบของคุณด้วยwithRouter
เพราะ<Route />
ที่ผ่านมาmatch
, location
และhistory
เพื่อเด็ก
3) เปลี่ยนเส้นทางหลังจากคลิกองค์ประกอบบางส่วน
มีสองตัวเลือกที่นี่ คุณสามารถใช้history.push()
โดยส่งต่อไปยังonClick
เหตุการณ์:
<div onClick={this.props.history.push('/path')}> some stuff </div>
หรือคุณสามารถใช้<Link />
ส่วนประกอบ:
<Link to='/path' > some stuff </Link>
ฉันคิดว่าหลักการง่ายๆในกรณีนี้คือการพยายามใช้<Link />
ก่อนฉันคิดว่าโดยเฉพาะอย่างยิ่งเนื่องจากประสิทธิภาพ