Скажімо, у мене є компонент перегляду, який має умовне візуалізацію:
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
вимикача?