Liên kết hoạt động với React-Router?


86

Tôi đang thử React-Router (v4) và tôi gặp sự cố khi khởi động Nav để có một trong những điều Linkđó active. Nếu tôi nhấp vào bất kỳ Linkthẻ nào, thì nội dung đang hoạt động sẽ bắt đầu hoạt động. Tuy nhiên, tôi muốn Trang chủ Linkhoạt động ngay khi ứng dụng khởi động vì đó là thành phần tải tại /tuyến đường. Có cách nào để làm điều này?

Đây là mã hiện tại của tôi:

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>
)

Câu trả lời:


208

<Link>không còn thuộc tính activeClassNamehoặc activeStyle. Trong react-router v4, bạn phải sử dụng <NavLink>nếu muốn tạo kiểu có điều kiện:

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>
)

Tôi đã thêm một thuộc tính chính xác vào ngôi nhà <NavLink>, tôi khá chắc chắn rằng nếu không có nó, liên kết trang chủ sẽ luôn hoạt động vì /sẽ phù hợp với /aboutbất kỳ trang nào khác mà bạn có.


2
Tôi đã bỏ qua câu trả lời này hôm nay vì tôi nghĩ rằng việc sử dụng NavLink ngay từ cái nhìn đầu tiên đã tránh được vấn đề. Khó có nơi nào khác giải thích được điều này. Mọi người cần ủng hộ câu trả lời này vì anh ấy chính xác. bạn phải sử dụng NavLink. CŨNG THẾ! chính xác = {true} cũng chính xác đúng. Nếu không, liên kết đầu tiên hiển thị sẽ không hiển thị khi bạn nhấp vào các liên kết khác khiến trang chủ luôn hoạt động. Tôi ước tôi có thể ủng hộ bạn thêm 10 lần nữa.
wuno

4
Chỉ cần lưu ý nhanh, nếu bạn đang sử dụng React với Redux, bạn cần theo dõi github.com/ReactTraining/react-router/blob/master/packages/…
Petr Adam

1
Trong trường hợp của các tuyến đường lồng nhau, bạn có thể cần phải sử dụng exactcho NavLinkquá.
Wiktor Czajkowski

1
Cảm ơn bạn về liên kết đó, @PetrAdam - đã tự hỏi tại sao điều này không hoạt động! (giải pháp là kết thúc connectcuộc gọi với withRouter).
Brian Burns,

1
Để tránh redux chặn kết xuất lại, bạn có thể cung cấp tùy chọn pure: falsecho connect()phương thức. Thông tin thêm về chế độ xem không được cập nhật: https://github.com/reduxjs/react-redux/blob/master/docs/troubleshooting.md
Pateta
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.