ก่อนอื่นคุณไม่จำเป็นต้องทำ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');