React-Router ile aktif bağlantı?


91

Ben dışarı çalışıyorum (v4)-Router tepki ve ben birine sahip Nav kapalı başlayarak sahip sorunları değilim Link'olmak s active. LinkEtiketlerin herhangi birine tıklarsam , aktif öğeler çalışmaya başlar. Ancak, rotada Linkyüklenen bileşen bu olduğundan, Home'un uygulama başlar başlamaz etkin olmasını istiyorum /. Bunu yapmanın bir yolu var mı?

İşte mevcut kodum:

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

Yanıtlar:


217

<Link>artık activeClassNameveya activeStyleözelliklerine sahip değil. React-router v4'te <NavLink>, koşullu şekillendirme yapmak istiyorsanız kullanmanız gerekir :

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

Eve tam bir mülk ekledim <NavLink>, onsuz, ev bağlantısının her zaman etkin /olacağından eminim çünkü eşleşecek /aboutve sahip olduğunuz diğer sayfalar.


2
Bugün bu cevabı göz ardı ettim çünkü NavLink kullanmanın ilk bakışta problemden kaçındığını düşündüm. Bunu açıklayan başka bir yer bulmak zor. İnsanların bu yanıta olumlu oy vermesi gerekiyor çünkü o kesinlikle haklı. NavLink kullanmanız gerekir. AYRICA! tam = {true} da tam olarak doğru. Aksi takdirde, diğer bağlantılara tıkladığınızda oluşturulan ilk bağlantı yeniden oluşturulmayacaktır ve ana sayfa her zaman etkin olacaktır. Keşke size 10 kez daha yüksek oy verebilseydim.
wuno

4
Hızlı bir not, Redux ile React kullanıyorsanız, bu github.com/ReactTraining/react-router/blob/master/packages/…
Petr Adam

1
İç içe geçmiş yollar söz konusu olduğunda, bunun exactiçin de kullanmanız gerekebilir NavLink.
Wiktor Czajkowski

1
Bu bağlantı için teşekkürler, @PetrAdam - bunun neden işe yaramadığını merak ediyordu! (çözüm, connectaramayı sonlandırmaktır withRouter).
Brian Burns

1
Yeniden oluşturmayı engellemekten kaçınmak pure: falseiçin, connect()yönteme seçenek sunabilirsiniz . Güncellenmekte olan bir görünüm hakkında daha fazla bilgi: https://github.com/reduxjs/react-redux/blob/master/docs/trunning.md
Pateta
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.