제안 된 방법 사용 :
결과 : 버튼의 링크 ,
주석 줄 사이의 코드
react를 사용하여 HTML 태그 에서 Link
요소 를 래핑하는 방법이 있는지 궁금합니다 .'react-router'
button
현재 Link
내 앱에서 페이지를 탐색하기위한 구성 요소가 있지만 해당 기능을 HTML 버튼에 매핑하고 싶습니다.
답변
이것이 웹 브라우저에서 렌더링되지만주의하십시오 :
⚠️ html button
에 html 을 중첩 a
(또는 그 반대) 하는 것은 유효한 html이 아닙니다 ⚠️. 화면 판독기에 html 의미를 유지하려면 다른 접근 방식을 사용하십시오.
반대로 포장하면 링크가 첨부 된 원래 버튼이 나타납니다. CSS 변경이 필요하지 않습니다.
<Link to="/dashboard">
<button type="button">
Click Me!
</button>
</Link>
여기 버튼은 HTML 버튼입니다. Semantic-UI-React 와 같은 타사 라이브러리에서 가져온 구성 요소에도 적용 할 수 있습니다.
import { Button } from 'semantic-ui-react'
...
<Link to="/dashboard">
<Button style={myStyle}>
<p>Click Me!</p>
</Button>
</Link>
답변
LinkButton
component-React Router v4 용 솔루션
첫째,이 질문에 대한 다른 많은 답변에 대한 메모입니다.
⚠️ 중첩 <button>
되며 <a>
유효한 html이 아닙니다. ⚠️
button
React Router Link
구성 요소에 html 을 중첩하는 것을 제안하는 모든 답변 (또는 그 반대)은 웹 브라우저에서 렌더링되지만 의미 론적이거나 액세스 가능하거나 유효한 html은 아닙니다.
<a stuff-here><button>label text</button></a>
<button><a stuff-here>label text</a></button>
☝ 이 마크 업을 validator.w3.org로 확인하려면 클릭하십시오 ☝
일반적으로 버튼이 링크 내부에 배치되지 않기 때문에 레이아웃 / 스타일링 문제가 발생할 수 있습니다.
<button>
React Router <Link>
구성 요소 와 함께 html 태그 사용 .
html button
태그 만 원하는 경우 …
<button>label text</button>
… 그런 다음, React Router의 Link
구성 요소 처럼 작동하는 버튼을 얻는 올바른 방법이 있습니다 .
React Router의 withRouter HOC를 사용 하여 이러한 소품을 구성 요소에 전달하십시오.
history
location
match
staticContext
LinkButton
구성 요소
LinkButton
복사 / 파스타 할 수 있는 구성 요소는 다음과 같습니다 .
// file: /components/LinkButton.jsx
import React from 'react'
import PropTypes from 'prop-types'
import { withRouter } from 'react-router'
const LinkButton = (props) => {
const {
history,
location,
match,
staticContext,
to,
onClick,
// ⬆ filtering out props that `button` doesn’t know what to do with.
...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>
onClick 메서드가 필요한 경우 :
<LinkButton
to='/path/to/page'
onClick={(event) => {
console.log('custom event here!', event)
}}
>Push My Buttons!</LinkButton>
업데이트 : 위의 내용이 작성된 후 사용할 수있는 또 다른 재미있는 옵션을 찾고 있다면이 useRouter hook을 확인하세요 .
답변
버튼과 동일한 CSS로 링크 태그를 장식하지 않는 이유는 무엇입니까?
<Link
className="btn btn-pink"
role="button"
to="/"
onClick={this.handleClick()}
>
Button1
</Link>
답변
경우에 당신은 사용 react-router-dom
하고 material-ui
당신은 사용할 수 있습니다 …
import { Link } from 'react-router-dom'
import Button from '@material-ui/core/Button';
<Button component={Link} to="/open-collective">
Link
</Button>
여기에서 자세한 내용을 읽을 수 있습니다 .
답변
react-router v5.1.0 이후 useHistory
후크 를 사용할 수 있습니다 .
useHistory
후크 당신이 탐색하는 데 사용할 수 있다는 것을 역사 인스턴스에 액세스 할 수 있습니다.
import React from 'react'
import { useHistory } from 'react-router'
export default function SomeComponent() {
const { push } = useHistory()
...
<button
type="button"
onClick={() => push('/some-link')}
>
Some link
</button>
...
}
답변
라우터와 <버튼 />을 사용합니다. 아니요 <링크 />
<Button onClick={()=> {this.props.history.replace('/mypage')}}>
HERE
</Button>
![](http://daplus.net/wp-content/uploads/2023/04/coupang_part-e1630022808943-2.png)