ก่อนอื่นคุณไม่จำเป็นต้องทำvar r = this;
เช่นนี้ในการif statement
อ้างถึงบริบทของการโทรกลับตัวเองซึ่งเนื่องจากคุณกำลังใช้ฟังก์ชั่นลูกศรหมายถึงบริบทองค์ประกอบการตอบสนอง
ตามเอกสาร:
วัตถุประวัติมักจะมีคุณสมบัติและวิธีการดังต่อไปนี้:
ดังนั้นในขณะที่นำทางคุณสามารถส่งอุปกรณ์ประกอบฉากไปยังวัตถุประวัติศาสตร์เช่น
this.props.history.push({
pathname: '/template',
search: '?query=abc',
state: { detail: response.data }
})
หรือคล้ายกันสำหรับLink
องค์ประกอบหรือRedirect
ส่วนประกอบ
<Link to={{
pathname: '/template',
search: '?query=abc',
state: { detail: response.data }
}}> My Link </Link>
จากนั้นในองค์ประกอบที่แสดงด้วย/template
เส้นทางคุณสามารถเข้าถึงอุปกรณ์ประกอบฉากที่ส่งผ่านเช่น
this.props.location.state.detail
โปรดทราบว่าเมื่อใช้ประวัติหรือวัตถุตำแหน่งจากอุปกรณ์ประกอบฉากคุณต้องเชื่อมต่อส่วนwithRouter
ประกอบด้วย
ตามเอกสาร:
withRouter
คุณสามารถเข้าถึงคุณสมบัติของวัตถุประวัติและการ<Route>'s
จับคู่ที่ใกล้เคียงที่สุด
ผ่านwithRouter
ส่วนประกอบลำดับสูงกว่า withRouter
จะเป็นการทำให้ส่วนประกอบของทุกครั้งที่มีการเปลี่ยนแปลงเส้นทางที่มีอุปกรณ์ประกอบฉากเช่นเดียวกับการแสดงผล<Route>
props: { match, location, history }
Route
ควรมีการเข้าถึงthis.props.location
,this.props.history
ฯลฯ ฉันคิดว่าคุณไม่จำเป็นต้องใช้ref
อีกต่อไปกับ v4 ลองทำthis.props.history.push('/template');