LinkButton
घटक - रिएक्टर राउटर v4 के लिए एक समाधान
सबसे पहले, इस प्रश्न के कई अन्य उत्तर के बारे में एक नोट।
⚠️ घोंसला बनाना <button>
और <a>
वैध HTML नहीं है। ⚠️
यहां कोई भी उत्तर जो button
एक रिएक्टर राउटर Link
घटक (या इसके विपरीत) में एक html को घोंसले में डालने का सुझाव देता है, एक वेब ब्राउज़र में प्रस्तुत करेगा, लेकिन यह शब्दार्थ, सुलभ या मान्य HTML नहीं है:
<a stuff-here><button>label text</button></a>
<button><a stuff-here>label text</a></button>
Up इस मार्कअप को validator.w3.org के साथ मान्य करने के लिए क्लिक करें ate
यह लेआउट / स्टाइलिंग मुद्दों को जन्म दे सकता है क्योंकि बटन आमतौर पर लिंक के अंदर नहीं रखे जाते हैं।
<button>
React Router <Link>
घटक के साथ HTML टैग का उपयोग करना ।
यदि आप केवल एक html button
टैग चाहते हैं ...
<button>label text</button>
... तो, यहाँ एक बटन है कि प्रतिक्रिया रूटर के Link
घटक की तरह काम करता है पाने के लिए सही तरीका है ...
इन प्रॉप्स को अपने कंपोनेंट में पास करने के लिए React Router के withRouter HOC का उपयोग करें :
history
location
match
staticContext
LinkButton
अंग
यहां LinkButton
आपको कॉपी / पास्ता के लिए एक घटक दिया गया है :
import React from 'react'
import PropTypes from 'prop-types'
import { withRouter } from 'react-router'
const LinkButton = (props) => {
const {
history,
location,
match,
staticContext,
to,
onClick,
...rest
} = props
return (
<button
{...rest} // `children` is just another prop!
onClick={(event) => {
onClick && onClick(event)
history.push(to)
}}
/>
)
}
LinkButton.propTypes = {
to: PropTypes.string.isRequired,
children: PropTypes.node.isRequired
}
export default withRouter(LinkButton)
फिर घटक आयात करें:
import LinkButton from '/components/LinkButton'
घटक का उपयोग करें:
<LinkButton to='/path/to/page'>Push My Buttons!</LinkButton>
अगर आपको ऑनक्लिक विधि की आवश्यकता है:
<LinkButton
to='/path/to/page'
onClick={(event) => {
console.log('custom event here!', event)
}}
>Push My Buttons!</LinkButton>
अद्यतन: यदि आप ऊपर लिखे जाने के बाद उपलब्ध किए गए किसी अन्य मज़ेदार विकल्प की तलाश कर रहे हैं, तो इस उपयोगपत्री हुक की जाँच करें ।
import { Button } from 'react-bootstrap';
।