Dies ist meine Komponente. Ich verwende die Inline-Pfeilfunktion, um die Route onClick
von div zu ändern, aber ich weiß, dass dies in Bezug auf die Leistung kein guter Weg ist
1. Inline-Pfeilfunktion
changeRoute (routeName) {
console.log(routeName)
}
render() {
return (
<>
<div onClick={() => this.changeRoute("page1")}>1</div>
<div onClick={() => this.changeRoute("page2")}>2</div>
</>
)
}
2. Wenn ich Konstruktorbindung verwende, wie kann ich dann Requisiten übergeben?
constructor() {
super(props)
this.changeRoute = this.changeRoute.bind(this)
}
changeRoute (routeName) {
console.log(routeName)
}
render() {
return (
<>
<div onClick={this.changeRoute}>1</div>
<div onClick={this.changeRoute}>2</div>
</>
)
}
3. Wenn ich die Pfeilfunktion entferne, wird die Funktion beim Rendern selbst aufgerufen
changeRoute (routeName) {
console.log(routeName)
}
render() {
return (
<>
<div onClick={this.changeRoute("page1")}>1</div>
<div onClick={this.changeRoute("page2")}>2</div>
</>
)
}
4. Wenn ich Inline-Bindung verwende, ist dies auch bei der Leistung nicht am besten
changeRoute (routeName) {
console.log(routeName)
}
render() {
return (
<>
<div onClick={this.changeRoute.bind(this, "page1")}>1</div>
<div onClick={this.changeRoute.bind(this, "page2")}>2</div>
</>
)
}
Wie kann ich dann am besten mit der Übergabe von Parametern fortfahren?
javascript
reactjs
Dunkler Ritter
quelle
quelle
Antworten:
Mit der Pfeilfunktion können Sie Ihren
changeRoute
Handler definieren .Dies ist bekannt als
Class field syntax
. Mehr dazu hier in offiziellen Reaktionsdokumenten.Dann können Sie diese Funktion direkt wie folgt nutzen:
Sie müssen sich nicht um die Bindung kümmern. Pfeilfunktionen erben die ihrer Eltern
this
.quelle
executing on the go
. Meine Antwort ist eine Antwort darauf. Ich versuche Ihnen zu sagen, dass Ihr Click-Handler dies nicht tut,execute on the go
wenn Sie den Handler so definieren, wie ich ihn gepostet habe.Sie können Ihrem div Daten hinzufügen:
Anschließend können Sie diese Daten in Ihrem onClick-Handler abrufen:
quelle
# 1 ist in Ordnung.
# 2 ist auch 'in Ordnung', aber Sie müssen Requisiten übergeben, dann sieht die Renderfunktion genau wie # 1 aus . Sie rufen die
bind
Funktion 'd' auf, weil Sie sie im Konstruktor ersetzt haben.# 3 ist einfach falsch, da die Funktion beim Rendern aufgerufen wird.
Und in Bezug auf # 4 aus React Docs
Dies führt zu einer Leistungsminderung, wenn Ihre Funktion in ihren untergeordneten Komponenten verwendet wird, und führt dazu, dass die untergeordneten Komponenten erneut gerendert werden (in Ihrem Fall nicht). Du solltest also nicht # 4 machen .
quelle
Der derzeit beste Weg ist, Ihren Event-Handler in einen
useCallback
Hook zu verpacken, da dadurch verhindert wird, dass Ihre Handler-Funktion bei jedem Aufruf des Renderings erstellt wird.Für weitere Informationen überprüfen Sie - verwenden Sie Callback-Dokumente
quelle