Предположим, что я создал компонент, который можно включить/выключить на основе состояния.React многократно используемый компонент состояния
var onOff = React.createElement(<OnOff />, mountElement);
onOff.setState({ on: false });
Позже я создаю новый компонент под названием «Родитель», который будет использовать OnOff внутри него.
render() { return <div><OnOff /></div> }
Теперь, как я могу изменить состояние OnOff? Я не могу назвать setState на нем. И я не должен отвечать React doc. Так что я должен добавить начальное состояние для реквизита ONOFF в:
constructor(props) {
super(props);
this.state = { on: props.initialOn };
}
затем в методе визуализации Родителя, установите опору initialOn с его состоянием:
render() { return <div><OnOff initialOn={false} /></div> }
Но это все еще не работает, потому что всякий раз, когда я меняю Родитель state, компонент OnOff внутри него не воссоздается с новым начальным состоянием. Вместо этого он только повторно отображается со старым состоянием. У меня есть CodePen, чтобы это доказать: http://codepen.io/anon/pen/QjMwjO?editors=101
Полезно отметить, что компоненты предпочтительно не должны иметь состояния, но вопрос OP: задан компонент с состоянием, как я могу обновить состояние после первоначального рендера. – wintvelt
Я понимаю, как большинство компонентов должны быть без гражданства. Тем не менее, сценарий заключается в том, что я создал OnOff сначала как автономный компонент с состоянием. Я использовал OnOff в веб-приложении, где у него нет владельца React или родителя. Он монтируется на элемент DOM, и я могу легко изменить его состояние, когда это необходимо. Позже, создав другой компонент, я понял, что могу восстановить компонент OnOff. Также возможно, что OnOff предоставляется сторонней библиотекой, которую я не могу изменить, если я не разблокирую код. – cnshenj
А, я понимаю, что вы имеете в виду. – shashi