रिएक्ट-राउटर के साथ सक्रिय लिंक?


86

मैं रिएक्ट-राउटर (v4) की कोशिश कर रहा हूं और मुझे नव शुरू होने वाले मुद्दों में से एक Linkहोना चाहिए active। अगर मैं इनमें से किसी पर क्लिक करता हूंLink टैग , तो सक्रिय सामान काम करना शुरू कर देता है। हालाँकि, मैं चाहूंगा कि होम 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>
)

जवाबों:


206

<Link>अब activeClassNameया activeStyleगुण नहीं है। <NavLink>यदि आप सशर्त स्टाइलिंग करना चाहते हैं, तो प्रतिक्रिया-राउटर v4 का उपयोग करना होगा:

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 का उपयोग करना होगा। यह भी! सटीक = {सत्य} बिल्कुल सही भी है। अन्यथा जब आप हमेशा सक्रिय रहने वाले अन्य लिंक पर क्लिक करते हैं तो रेंडर करने वाला पहला लिंक रेंडर नहीं करेगा। काश मैं तुम्हें 10 और बार उखाड़ सकता।
वूनो

4
बस एक त्वरित ध्यान दें, यदि आप Redux के साथ प्रतिक्रिया का उपयोग कर रहे हैं, तो आपको इस github.com/ReactTraining/react-router/blob/master/packages/…
पेट्र एडम

1
नेस्टेड मार्गों के मामले में, आप का उपयोग करने के लिए आवश्यकता हो सकती exactके लिए NavLinkभी।
विकटोरिया कज्जाकोव्स्की

1
उस लिंक के लिए धन्यवाद, @PetrAdam - सोच रहा था कि यह काम क्यों नहीं कर रहा था! (समाधान के connectसाथ कॉल को लपेटना है withRouter)।
ब्रायन बर्न्स

1
फिर से रेंडर करने से बचने के लिए आप विधि pure: falseको विकल्प प्रदान कर सकते हैं connect()। किसी दृश्य के बारे में अधिक जानकारी अपडेट नहीं की जा रही है: https://github.com/reduxjs/react-redux/blob/master/docs/troublesourcing.md
Pateta
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.