Digamos que eu tenha um componente de visualização com renderização condicional:
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 é parecido com isto:
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>
);
}
}
Vamos dizer que employedé verdade. Sempre que eu mudo para false e a outra visualização é renderizada, apenas unemployment-durationé reinicializado. Também unemployment-reasoné preenchido com o valor de job-title(se um valor foi fornecido antes da alteração da condição).
Se eu alterar a marcação na segunda rotina de renderização para algo assim:
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>
);
}
}
Parece que tudo funciona bem. Parece que o React simplesmente falha em diferenciar 'cargo' e 'motivo de desemprego'.
Por favor me diga o que estou fazendo de errado ...
<div>. Os data-reactidatributos parecem ser diferentes no div de agrupamento e no campo de entrada. job-titlea entrada obtém id data-reactid=".0.1.1.0.1.0.1", enquanto a unemployment-reasonentrada obtém iddata-reactid=".0.1.1.0.1.2.1"
unemployment-duration?
reactidatributos são idênticos em job-titlee unemployment-reason, enquanto no segundo exemplo (com o intervalo diff) eles são diferentes.
unemployment-durationo reactidatributo é sempre único.
data-reactidem cada um dos elementosMyInput(ouinput, como visto no DOM) antes e depois daemployedtroca?