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 employed
c'est vrai. Chaque fois que je le change sur false et que l'autre vue est rendue, seule unemployment-duration
est réinitialisée. unemployment-reason
Obtient é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-reactid
attributs semblent être différents à la fois sur le div d'encapsulation et sur le champ d'entrée. job-title
l'entrée obtient l'id data-reactid=".0.1.1.0.1.0.1"
, tandis que l' unemployment-reason
entrée obtient l'iddata-reactid=".0.1.1.0.1.2.1"
unemployment-duration
?
reactid
attributs sont identiques sur job-title
et unemployment-reason
, tandis que dans le second exemple (avec le diff span) ils sont différents.
unemployment-duration
l' reactid
attribut est toujours unique.
data-reactid
sur chacun des élémentsMyInput
(ouinput
, comme on le voit dans DOM) avant et après leemployed
commutateur?