HTML:
JS:
var Counter = React.createClass({
getInitialState : function() {
return {
list:['one','two'],
flag: 1
}
},
changeFlag : function() {
this.setState({flag:2});
},
render : function() {
var list = this.state.list;
var flag = this.state.flag;
return (
<div>
<ul id="list">
{
list.map((item, index) => (
<li>{item}</li>
))
}
</ul>
<button onClick={this.changeFlag}>{flag}</button>
</div>
);
}
})
ReactDOM.render( <Counter />, document.getElementById('content') );
setTimeout(function(){
document.getElementById('list').childNodes[0].innerText= 'three'
},2000)
我已将列表初始化为“一”和“二”。现在我使用 jquery 直接更新 DOM,并在 2 秒超时后将“一”的值更改为“三”。现在,通过单击按钮,我再次进入状态,重新渲染组件。
现在我的问题是,如果我直接将 DOM 从“一”更改为“三”,虚拟 DOM 应该仍然保持值“一”,所以下次如果我更改状态,它将根据浏览器 DOM 检查虚拟 DOM,并且应该使用虚拟 DOM 更新浏览器 DOM。在我的情况下,单击按钮后值“三”仍然存在,这是怎么回事?