Wie verwende ich das onClick-Ereignis für die React Link-Komponente?


82

Ich verwende die Link-Komponente vom ReactJS-Router und kann das onClickevent nicht zum Laufen bringen. Dies ist der Code:

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

Ist das der Weg oder ein anderer Weg?

Antworten:


124

Sie übergeben hello()als Zeichenfolge, hello()bedeutet auch hellosofort ausführen .

Versuchen

onClick={hello}

31

Sie sollten dies verwenden:

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

Oder (wenn die Methode helloin dieser Klasse liegt):

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

Update: Für ES6 und die neueste Version können Sie Folgendes verwenden, wenn Sie einen Parameter mit der Klickmethode binden möchten:

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

4
Oder besserthis.hello.bind(this)
webNeat

4
^ Sie sollten Aktionen im Konstruktor eigentlich immer binden, da die Bindung der Art und Weise, wie Sie sie haben, zu Leistungsproblemen führen kann.
Nunchucks

Link "zu" ist erforderlich, aber oft brauche ich nur onClick (), momentan muss ich so etwas tun <Link to="" onClick={this.delete}>Delete</Link>. Ich wünsche "zu" ist hier optional.
Newman

2
@newman Warum würdest du Linkohne verwenden to? Wenn Sie es nicht brauchen, dann nur eine andere Komponente wie eine <button>mit der onClickMethode und Sie können loslegen;).
Guilherme Oderdenge

23

Ich glaube nicht, dass dies ein gutes Muster im Allgemeinen ist. Link führt Ihr onClick-Ereignis aus und navigiert dann zur Route, sodass die Navigation zur neuen Route geringfügig verzögert wird. Eine bessere Strategie besteht darin, wie zuvor mit der 'to'-Requisite zur neuen Route zu navigieren. In der componentDidMount () -Funktion der neuen Komponente können Sie Ihre Hallo-Funktion oder eine andere Funktion auslösen. Sie erhalten das gleiche Ergebnis, jedoch mit einem viel reibungsloseren Übergang zwischen den Routen.

Für den Kontext habe ich dies beim Aktualisieren meines Redux-Speichers mit einem onClick-Ereignis auf Link bemerkt, wie Sie es hier haben, und es hat eine Verzögerung von ~ 0,3 Sekunden auf dem weißen Bildschirm verursacht, bevor die Komponente der neuen Route bereitgestellt wurde. Es war kein API-Anruf beteiligt, daher war ich überrascht, dass die Verzögerung so groß war. Wenn Sie jedoch nur die Konsole protokollieren, ist die Verzögerung möglicherweise nicht spürbar.


Ich habe eine Rückruf-URL in meiner aktuellen Komponente, die ich in einem Cookie speichere, onClickbevor ich zu einer neuen Route übergehe. Ich werde diese Rückruf-URL in der nächsten Komponente nicht erhalten, daher muss ich dies vor dem Übergang selbst tun. Hast du eine Alternative dazu? PS: Die Rückruf-URL sollte auch nach der Aktualisierung verfügbar sein, damit sie im Geschäft gespeichert werden kann.
Parth Mistry

1
Wenn Sie die Reaktionsnavigation verwenden: Ich würde sagen, verwenden Sie keinen Link, sondern nur TouchableOpacity oder TouchableWithoutFeedback. In Ihrer onPress-Funktion können Sie navigieren und Ihre URL als onPress={() => { this.props.navigation.navigate('NameOfNextScreen', { callbackUrl: 'http://.callbackUrl.com', });Navigationsparameter übergeben. Wenn Sie die Reaktionsnavigation I nicht verwenden Ich würde nur Link's onClick verwenden und mir keine Sorgen über das leichte Leistungsproblem machen. Es wird wahrscheinlich nicht auffallen.
Nunchucks

Guter Rat! Vielen Dank!
aspiringsoftwaredev
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.