ลิงก์ที่ใช้งานอยู่กับ React-Router?


91

ฉันพยายามที่ออกมาตอบสนอง-Router (v4) และฉันมีปัญหาในการเริ่มต้นออก Nav จะมีหนึ่งของLink's activeBE หากฉันคลิกที่Linkแท็กใด ๆสิ่งที่ใช้งานอยู่จะเริ่มทำงาน อย่างไรก็ตามฉันต้องการให้ Home Linkใช้งานได้ทันทีที่แอปเริ่มทำงานเนื่องจากเป็นส่วนประกอบที่โหลดใน/เส้นทาง มีวิธีใดบ้างที่จะทำเช่นนี้?

นี่คือรหัสปัจจุบันของฉัน:

const Router = () => (
  <BrowserRouter>
    <div>
      <Nav>
        <Link activeClassName='is-active' to='/'>Home</Link> {/* I want this to start off as active */}
        <Link activeClassName='is-active' to='/about'>About</Link>
      </Nav>

      <Match pattern='/' exactly component={Home} />
      <Match pattern='/about' exactly component={About} />
      <Miss component={NoMatch} />
    </div>
  </BrowserRouter>
)

คำตอบ:


217

<Link>ไม่มีคุณสมบัติactiveClassNameหรือactiveStyleคุณสมบัติอีกต่อไป ใน react-router v4 คุณต้องใช้<NavLink>หากคุณต้องการจัดแต่งทรงผมตามเงื่อนไข:

const Router = () => (
  <BrowserRouter>
    <div>
      <Nav>
        <NavLink exact={true} activeClassName='is-active' to='/'>Home</NavLink>
        <NavLink activeClassName='is-active' to='/about'>About</NavLink>
      </Nav>

      <Match pattern='/' exactly component={Home} />
      <Match pattern='/about' exactly component={About} />
      <Miss component={NoMatch} />
    </div>
  </BrowserRouter>
)

ฉันได้เพิ่มคุณสมบัติที่แน่นอนลงในบ้าน<NavLink>ฉันค่อนข้างแน่ใจว่าหากไม่มีมันลิงก์หน้าแรกจะใช้งานได้ตลอดเวลาเนื่องจาก/จะตรงกัน/aboutและหน้าอื่น ๆ ที่คุณมี


2
ฉันมองข้ามคำตอบนี้ไปในวันนี้เพราะฉันคิดว่าการใช้ NavLink เป็นการหลีกเลี่ยงปัญหาในตอนแรก ยากที่จะหาได้จากที่อื่นที่อธิบายเรื่องนี้ ผู้คนต้องโหวตคำตอบนี้เพราะเขาพูดถูก คุณต้องใช้ NavLink นอกจากนี้! แน่นอน = {true} ก็ถูกต้องเช่นกัน มิฉะนั้นลิงก์แรกที่แสดงผลจะไม่แสดงผลเมื่อคุณคลิกลิงก์อื่นทำให้บ้านเปิดใช้งานอยู่เสมอ ฉันหวังว่าฉันจะโหวตให้คุณอีก 10 ครั้ง
wuno

4
เพียงแค่ทราบสั้น ๆ หากคุณใช้ React กับ Redux คุณต้องทำตามgithub.com/ReactTraining/react-router/blob/master/packages/…
Petr Adam

1
ในกรณีที่เส้นทางที่ซ้อนกันคุณอาจจำเป็นต้องใช้exactสำหรับNavLinkเกินไป
Wiktor Czajkowski

1
ขอบคุณสำหรับลิงค์นั้น @PetrAdam - สงสัยว่าทำไมถึงใช้ไม่ได้! (วิธีแก้คือการปิดconnectสายด้วยwithRouter)
Brian Burns

1
เพื่อหลีกเลี่ยงการบล็อกซ้ำซ้อนคุณสามารถระบุตัวเลือกpure: falseสำหรับconnect()วิธีการ ข้อมูลเพิ่มเติมเกี่ยวกับมุมมองที่ไม่มีการอัปเดต: https://github.com/reduxjs/react-redux/blob/master/docs/troubleshooting.md
Pateta
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.