Disons que j'ai un composant de vue qui a un rendu conditionnel:
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 ressemble à ceci:
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>
);
}
}
Disons que employedc'est vrai. Chaque fois que je le change sur false et que l'autre vue est rendue, seule unemployment-durationest réinitialisée. unemployment-reasonObtient également prérempli avec la valeur de job-title(si une valeur a été donnée avant que la condition ne change).
Si je change le balisage dans la deuxième routine de rendu en quelque chose comme ceci:
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>
);
}
}
Il semble que tout fonctionne bien. On dirait que React ne parvient tout simplement pas à différencier «titre du poste» et «raison du chômage».
S'il vous plaît dites-moi ce que je fais de mal ...
<div>. Les data-reactidattributs semblent être différents à la fois sur le div d'encapsulation et sur le champ d'entrée. job-titlel'entrée obtient l'id data-reactid=".0.1.1.0.1.0.1", tandis que l' unemployment-reasonentrée obtient l'iddata-reactid=".0.1.1.0.1.2.1"
unemployment-duration?
reactidattributs sont identiques sur job-titleet unemployment-reason, tandis que dans le second exemple (avec le diff span) ils sont différents.
unemployment-durationl' reactidattribut est toujours unique.
data-reactidsur chacun des élémentsMyInput(ouinput, comme on le voit dans DOM) avant et après leemployedcommutateur?