Ich habe hier eine Mauer getroffen, was bedeutet, ich kann nicht völlig herausfinden, warum die nächsten zwei Versionen von Code so unterschiedlich verhalten.Reagieren dynamisch Rendering-Komponente (Objekt zuweisen vs. Funktion zurück)
In der ersten Version, wenn ich ein this.childComponent = (<ChildComp />)
Initialisierungsphase seine Requisiten scheinen nicht zu aktualisieren, wenn ich die Parent
‚s Zustand ändern (via setState()
). Dies geschieht, obwohl der setState()
tatsächlich aufgerufen wird und der Parent
-Status aktualisiert wird.
In der zweiten Version, wenn ich tatsächlich eine Funktion initialisiere, die die Komponente (this.childComponent =() => {return (<ChildComp />)}
) zurückgibt, funktioniert alles wie ein Charme, Requisiten werden aktualisiert. Ich benutze die zweite Version (da es funktioniert), aber ich würde gerne verstehen, warum das funktioniert und das erste nicht.
Hier ist das Kind Komponente:
class Child extends React.Component {
render() {
return (
<button onClick=(this.props.setValue())>
{this.props.value}
</button>
)
}
}
ich die nächsten zwei Versionen der Elternkomponente haben:
1.
class Parent extends React.Component {
constructor() {
this.state = {
value: 1
}
this.childComponent = (
<Child value={this.state.value}
setValue={() => this.setValue()}/>
)
}
setValue() {
this.setState({value: 2})
}
render() {
return ({this.childComponent})
}
}
2. (die this.childComponent
ist jetzt eine Funktion, die das reaktive Element zurückgibt)
class Parent extends React.Component {
constructor() {
this.state = {
value: 1
}
this.childComponent =() => {
return (
<Child value={this.state.value}
setValue={() => this.setValue()}/>
)
}
}
setValue() {
this.setState({value: 2})
}
render() {
return ({this.childComponent()})
}
}
Ich habe versucht, den Code zu vereinfachen, damit mein Problem leichter zu verstehen ist.
Vielen Dank im Voraus
In Ihrer ersten (gebrochenen) Version wird die untergeordnete Komponente statisch definiert und nie wieder geändert. – pscl
Sie haben keine Rückkehr im ersten Fall 'render() { Rückgabe {this.childComponent} }' kann funktionieren, sonst ist die untergeordnete Komponente statisch –
Got it, danke für die Erklärungen –