Скажімо, у мене є компонент перегляду, який має умовне візуалізацію:
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 виглядає приблизно так:
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>
);
}
}
Скажімо, employedце правда. Щоразу, коли я перемикаю його на помилковий, а інший вигляд відображається, лише unemployment-durationповторно ініціалізується. Також unemployment-reasonпопередньо заповнюється значенням з job-title(якщо значення було задано до зміни умови).
Якщо я поміняю розмітку у другому режимі візуалізації на щось подібне:
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>
);
}
}
Здається, все працює добре. Схоже, React просто не в змозі розрізняти "посаду" та "безробіття".
Скажіть, будь ласка, що я роблю неправильно ...
<div>. Ці data-reactidатрибути , як видається, відрізняється як на обгорткового DIV і поле введення. job-titleвхід отримує ідентифікатор data-reactid=".0.1.1.0.1.0.1", а unemployment-reasonвхід отримує iddata-reactid=".0.1.1.0.1.2.1"
unemployment-duration?
reactidатрибути однакові по job-titleі unemployment-reason, в той час як у другому прикладі (з прольотом дифф) вони відрізняються.
unemployment-durationв reactidатрибуті завжди унікальний.
data-reactidкожного зMyInput(абоinput, як це видно в DOM) елементів до і післяemployedвимикача?