reactjsルーターからLinkコンポーネントを使用していますが、onClickeventを機能させることができません。これはコードです:
<Link to={this.props.myroute} onClick='hello()'>Here</Link>
これはそれを行う方法ですか、それとも別の方法ですか?
回答:
これを使用する必要があります:
<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>
<Link to="" onClick={this.delete}>Delete</Link>
です。現在、のようなことをしなければなりません。ここで「to」がオプションであることを望みます。
Link
なしで使うのto
ですか?それが必要ない場合<button>
は、onClick
メソッドを使用したaなどの他のコンポーネントを使用すれば、問題ありません;)。
これは一般的に使用するのに適したパターンではないと思います。リンクはonClickイベントを実行してからルートに移動するため、新しいルートへの移動にはわずかな遅延が発生します。より良い戦略は、これまでと同じように「to」プロップを使用して新しいルートに移動することです。新しいコンポーネントのcomponentDidMount()関数で、hello関数またはその他の関数を起動できます。同じ結果が得られますが、ルート間の移行がはるかにスムーズになります。
コンテキストとして、ここにあるようにLinkのonClickイベントでreduxストアを更新しているときにこれに気づき、新しいルートのコンポーネントをマウントする前に、最大.3秒の空白の白い画面の遅延が発生しました。API呼び出しが含まれていなかったので、遅延が非常に大きいことに驚きました。ただし、コンソールロギング 'hello'だけの場合は、遅延が目立たない可能性があります。
onClick
新しいルートに移行する前にCookieに保存しています。次のコンポーネントでそのコールバックURLを取得しないため、移行自体の前に取得する必要があります。それに代わるものはありますか?PS:コールバックURLは、更新後もアクセスできる必要があるため、ストアに保存できます。
onPress={() => { this.props.navigation.navigate('NameOfNextScreen', { callbackUrl: 'http://.callbackUrl.com', });
パラメーターとして渡すことができます。react -navigationを使用していない場合I LinkのonClickを使用するだけで、わずかなパフォーマンスの問題について心配する必要はありません。おそらく目立たないでしょう。
this.hello.bind(this)