บางคนสามารถอธิบายความแตกต่างระหว่าง
<Route exact path="/" component={Home} />
และ
<Route path="/" component={Home} />
ฉันไม่รู้ความหมายของ 'แน่นอน'
บางคนสามารถอธิบายความแตกต่างระหว่าง
<Route exact path="/" component={Home} />
และ
<Route path="/" component={Home} />
ฉันไม่รู้ความหมายของ 'แน่นอน'
คำตอบ:
ในตัวอย่างนี้ไม่มีอะไรจริงๆ exact
พระรามมาลงเล่นเมื่อคุณมีหลายเส้นทางที่มีชื่อคล้ายกัน:
ตัวอย่างเช่นสมมติว่าเรามีUsers
ส่วนประกอบที่แสดงรายการผู้ใช้ เรายังมีCreateUser
ส่วนประกอบที่ใช้ในการสร้างผู้ใช้ URL ของสำหรับควรจะซ้อนกันภายใต้CreateUsers
Users
ดังนั้นการตั้งค่าของเราอาจมีลักษณะดังนี้:
<Switch>
<Route path="/users" component={Users} />
<Route path="/users/create" component={CreateUser} />
</Switch>
ตอนนี้ปัญหาที่นี่เมื่อเราไปhttp://app.com/users
ที่เราเตอร์จะผ่านเส้นทางที่กำหนดทั้งหมดของเราและส่งคืนการแข่งขันครั้งแรกที่พบ ดังนั้นในกรณีนี้มันจะหาUsers
เส้นทางก่อนแล้วจึงส่งคืน ทั้งหมดดี.
แต่ถ้าเราไปถึงhttp://app.com/users/create
มันจะผ่านเส้นทางที่เรากำหนดไว้ทั้งหมดอีกครั้งและกลับมาพบกับการแข่งขันครั้งแรก React เร้าเตอร์ทำการจับคู่/users
บางส่วน/users/create
ดังนั้นจะจับคู่บางส่วนดังนั้นมันจะส่งคืนUsers
เส้นทางไม่ถูกต้องอีกครั้ง
exact
พระรามปิดการใช้งานการจับคู่บางส่วนสำหรับเส้นทางและทำให้แน่ใจว่ามันส่งกลับเฉพาะเส้นทางถ้าเส้นทางตรงไปยัง URL ปัจจุบัน
ดังนั้นในกรณีนี้เราควรเพิ่มเส้นทางexact
ของเราUsers
เพื่อให้ตรงกับ/users
:
<Switch>
<Route exact path="/users" component={Users} />
<Route path="/users/create" component={CreateUser} />
</Switch>
exact
ควรเป็นค่าเริ่มต้นในความคิดของฉัน
/admin//users
ในองค์ประกอบของผู้ดูแลระบบและ/admin/users/create
ในองค์ประกอบรูท ??? ขณะนี้ฉันมีสถานการณ์เช่นนี้และexact
วิธีการแก้ปัญหาทั่วไปไม่ทำงานอย่างถูกต้อง
กล่าวโดยย่อหากคุณมีหลายเส้นทางที่กำหนดไว้สำหรับการกำหนดเส้นทางแอปของคุณล้อมรอบด้วยSwitch
องค์ประกอบเช่นนี้
<Switch>
<Route exact path="/" component={Home} />
<Route path="/detail" component={Detail} />
<Route exact path="/functions" component={Functions} />
<Route path="/functions/:functionName" component={FunctionDetails} />
</Switch>
จากนั้นคุณจะต้องใส่exact
คำสำคัญในเส้นทางที่เส้นทางนั้นรวมอยู่ด้วยเส้นทางของเส้นทางอื่น ยกตัวอย่างเช่นเส้นทางบ้าน/
จะรวมอยู่ในทุกเส้นทางจึงต้องมีexact
คำหลักที่แตกต่างจากเส้นทางอื่น ๆ /
ที่เริ่มต้นด้วย เหตุผลก็คล้ายกับ/functions
เส้นทาง หากคุณต้องการที่จะใช้เส้นทางเส้นทางอื่นเช่น/functions-detail
หรือ/functions/open-door
ซึ่งรวม/functions
อยู่ในนั้นแล้วคุณจะต้องใช้exact
สำหรับ/functions
เส้นทาง
ดูที่นี่: https://reacttraining.com/react-router/core/api/Route/exact-bool
ถูกต้อง: บูล
เมื่อเป็นจริงจะจับคู่ก็ต่อเมื่อเส้นทางนั้นlocation.pathname
ตรงทั้งหมด
**path** **location.pathname** **exact** **matches?**
/one /one/two true no
/one /one/two false yes
คำตอบที่สั้นที่สุดคือ
โปรดลองสิ่งนี้
<switch>
<Route exact path="/" component={Home} />
<Route path="/about" component={About} />
<Route path="/shop" component={Shop} />
</switch>
exact
แอตทริบิวต์ / prop ได้ดังนั้นจึงไม่ใช่คำตอบ คุณควรพยายามตอบคำถามที่ถามจริงแทนที่จะให้วิธีแก้ปัญหาที่คุณไม่แน่ใจว่า OP มีจริงหรือไม่