Nehmen wir an, ich habe eine Ansichtskomponente mit einem bedingten Rendering:
render(){
if (this.state.employed) {
return (
<div>
<MyInput ref="job-title" name="job-title" />
</div>
);
} else {
return (
<div>
<MyInput ref="unemployment-reason" name="unemployment-reason" />
<MyInput ref="unemployment-duration" name="unemployment-duration" />
</div>
);
}
}
MyInput sieht ungefähr so aus:
class MyInput extends React.Component {
...
render(){
return (
<div>
<input name={this.props.name}
ref="input"
type="text"
value={this.props.value || null}
onBlur={this.handleBlur.bind(this)}
onChange={this.handleTyping.bind(this)} />
</div>
);
}
}
Sagen wir, employedist wahr. Immer wenn ich es auf false umschalte und die andere Ansicht gerendert wird, wird nur unemployment-durationneu initialisiert. Auch unemployment-reasonwird mit dem Wert aus vorbelegt job-title(wenn ein Wert gegeben wurde , bevor der Zustand geändert).
Wenn ich das Markup in der zweiten Renderroutine in etwa so ändere:
render(){
if (this.state.employed) {
return (
<div>
<MyInput ref="job-title" name="job-title" />
</div>
);
} else {
return (
<div>
<span>Diff me!</span>
<MyInput ref="unemployment-reason" name="unemployment-reason" />
<MyInput ref="unemployment-duration" name="unemployment-duration" />
</div>
);
}
}
Es scheint, als ob alles gut funktioniert. Es sieht so aus, als würde React die Berufsbezeichnung und den Grund für die Arbeitslosigkeit nicht unterscheiden.
Bitte sag mir, was ich falsch mache ...
<div>. Die data-reactidAttribute scheinen sowohl im Wrapping-Div als auch im Eingabefeld unterschiedlich zu sein. job-titleEingabe erhält ID data-reactid=".0.1.1.0.1.0.1", während unemployment-reasonEingabe ID erhältdata-reactid=".0.1.1.0.1.2.1"
unemployment-duration?
reactidAttribute identisch job-titleund unemployment-reasonim zweiten Beispiel (mit der diff span) unterschiedlich.
unemployment-durationdas reactidAttribut ist immer eindeutig.
data-reactidauf jedem derMyInput(oderinput, wie in DOM zu sehen) Elemente vor und nach dememployedWechsel?