React Link 구성 요소에서 onClick 이벤트를 사용하는 방법은 무엇입니까?


82

reactjs 라우터의 Link 구성 요소를 사용하고 있는데 onClickevent가 작동하지 않습니다. 다음은 코드입니다.

<Link to={this.props.myroute} onClick='hello()'>Here</Link>

이것이 그것을하는 방법입니까 아니면 다른 방법입니까?

답변:


124

hello()문자열 로 전달 하고 있으며 즉시 hello()실행 을 의미 hello합니다.

시험

onClick={hello}

31

이것을 사용해야합니다 :

<Link to={this.props.myroute} onClick={hello}>Here</Link>

또는 (메서드 hello가이 클래스에있는 경우) :

<Link to={this.props.myroute} onClick={this.hello}>Here</Link>

업데이트 : ES6 및 최신의 경우 클릭 방법으로 일부 매개 변수를 바인딩하려면 다음을 사용할 수 있습니다.

    const someValue = 'some';  
....  
    <Link to={this.props.myroute} onClick={() => hello(someValue)}>Here</Link>

4
또는 더 나은this.hello.bind(this)
webNeat aug.

4
^ 성능 문제를 일으킬 수있는 방식으로 바인딩 할 수 있으므로 실제로 항상 생성자에서 작업을 바인딩해야합니다.
Nunchucks

링크 "to"가 필요하지만 종종 onClick ()이 필요한 경우가 많습니다. 현재는 <Link to="" onClick={this.delete}>Delete</Link>. 여기서 "to"는 선택 사항입니다.
newman

2
@newman 왜 Link없이 사용 to하겠습니까? 당신이 그것을 필요로하지 않는 경우, 단지 다른 구성 요소 등으로 <button>onClick방법이있는 거 좋은 이동하십시오).
Guilherme Oderdenge

23

나는 이것이 일반적으로 사용하기에 좋은 패턴이라고 생각하지 않습니다. 링크는 onClick 이벤트를 실행 한 다음 경로로 이동하므로 새 경로로 이동하는 데 약간의 지연이 있습니다. 더 나은 전략은 당신이 한 것처럼 'to'prop을 사용하여 새로운 경로로 이동하는 것이며, 새로운 컴포넌트의 componentDidMount () 함수에서 hello 함수 나 다른 함수를 실행할 수 있습니다. 동일한 결과를 제공하지만 경로 간의 전환이 훨씬 더 원활합니다.

컨텍스트를 위해 여기에서와 같이 Link에서 onClick 이벤트로 redux 저장소를 업데이트하는 동안 이것을 발견했으며 새 경로의 구성 요소를 탑재하기 전에 ~ .3 초의 빈 흰색 화면 지연이 발생했습니다. 관련된 API 호출이 없었기 때문에 지연이 너무 커서 놀랐습니다. 그러나 콘솔 로깅 'hello'인 경우 지연이 눈에 띄지 않을 수 있습니다.


onClick새 경로로 전환하기 전에 쿠키에 저장중인 현재 구성 요소에 콜백 URL이 있습니다. 다음 구성 요소에서 해당 콜백 URL을 얻지 못하므로 전환하기 전에해야합니다. 그것에 대한 대안이 있습니까? 추신 : 콜백 URL은 새로 고침 후에도 액세스 할 수 있어야 저장소에 저장할 수 있습니다.
Parth Mistry

1
react-navigation을 사용하는 경우 : Link를 사용하지 말고 TouchableOpacity 또는 TouchableWithoutFeedback을 사용하면 onPress 함수에서 URL을 탐색하고 탐색 매개 변수로 전달할 수 있습니다. onPress={() => { this.props.navigation.navigate('NameOfNextScreen', { callbackUrl: 'http://.callbackUrl.com', });react-navigation을 사용하지 않는 경우 I Link의 onClick을 사용하고 약간의 성능 문제에 대해 걱정하지 마십시오. 아마 눈에 띄지 않을 것입니다.
Nunchucks

좋은 조언! 감사!
aspiringsoftwaredev
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.