我是React.js的新手。我試圖量化html文檔完全呈現所需的時間。有人請告訴我,我的方法是錯誤的,我發現結果根本沒有可比性。React.js:javascript vs reactjs DOM操作
使用陣營
var UList = React.createClass({
setText: function(){
var updatedItems = this.state.items;
var item = Math.abs(Math.random().toString().split('')
.reduce(function(p,c){return (p<<5)-p+c})).toString(36).substr(0,11);;
updatedItems.push(item);
this.setState({items: updatedItems});
},
getInitialState: function(){
return {
items: []
}
},
render: function(){
return (
<div id='component'>
<button id='bb' type="button" onClick={this.setText}>Set</button>
<List items={this.state.items}/>
</div>
);
}
});
var List = React.createClass({
render: function(){
return (
<ul>
{
this.props.items.map(function(item) {
return <li key={item}>{item}</li>
})
}
</ul>
)
}
});
ReactDOM.render(<UList text="kiran"/>, document.getElementById('container'));
console.log(new Date());
for(var i=0;i<1000;i++)
document.getElementById("bb").click();
console.log(new Date());
使用JavaScript
setText = function(){
var item = Math.abs(Math.random().toString().split('')
.reduce(function(p,c){return (p<<5)-p+c})).toString(36).substr(0,11);
var node = document.createElement("LI");
var textnode = document.createTextNode(item);
node.appendChild(textnode);
document.getElementById("myList").appendChild(node);
};
console.log(new Date());
for(var i=0;i<1000;i++)
document.getElementById("bb").click();
console.log(new Date());
你是什麼意思*'根本不可比'*?在這個例子中反應較慢?順便說一句:在你的'setText()'函數中,你直接更新狀態(反應不喜歡):當你執行'updatedItems.push()'時,你改變了updatedItems。該變量是指向狀態的指針,因此您更新狀態。最好是使用:'var updatedItems = this.state.items.slice();' – wintvelt
@wintvelt感謝您的快速回復。是反應較慢。我不明白「你的setText()函數中你直接更新狀態的部分」 – Kiran
你當前的'.push()'語句也改變了'this.state'變量。當你改變'this.setState()'之外的狀態時,React不喜歡它。你應該改變'var updatedItems = this這一行。state.items;'to:'var updatedItems = this.state.items.slice();'(注意在最後添加的片段用於複製數組)。 – wintvelt