Diciamo che ho un componente di visualizzazione che ha un rendering condizionale:
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 ha un aspetto simile a questo:
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>
);
}
}
Diciamo che employed
è vero. Ogni volta che lo cambio su false e l'altra vista esegue il rendering, solo unemployment-duration
viene reinizializzato. Inoltre unemployment-reason
viene precompilato con il valore da job-title
(se è stato fornito un valore prima della modifica della condizione).
Se cambio il markup nella seconda routine di rendering in qualcosa di simile:
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>
);
}
}
Sembra che tutto funzioni bene. Sembra che React non riesca a distinguere tra "titolo professionale" e "motivo della disoccupazione".
Per favore dimmi cosa sto sbagliando ...
<div>
. Gli data-reactid
attributi sembrano essere diversi sia nel div di avvolgimento che nel campo di input. job-title
input ottiene id data-reactid=".0.1.1.0.1.0.1"
, mentre unemployment-reason
input ottiene iddata-reactid=".0.1.1.0.1.2.1"
unemployment-duration
?
reactid
attributi sono identici su job-title
e unemployment-reason
, mentre nel secondo esempio (con lo span diff) sono diversi.
unemployment-duration
l' reactid
attributo è sempre unico.
data-reactid
su ciascuno degli elementiMyInput
(oinput
, come visto in DOM) prima e dopo ilemployed
passaggio?