我會盡我所能,儘量保持簡潔。如何在React中的for循環中包含onCLick?
我希望能夠從我的json數據狀態(庫)中刪除項目,但是現在當點擊「刪除」按鈕時我甚至無法獲得一個簡單的console.log。
每件東西都完美地顯示在負載上。 當我在"Delete"
按鈕的onClick={this.deleteClickHandler.bind(this)}
事件中寫入時出現錯誤。
父組件:
constructor(){
super();
this.state = {
test: "SiteFront State",
library : {
"copy" : {
"name" : "Copy",
"input" : "CMD + C",
"os" : "All"
},
"paste" : {
"name" : "paste",
"input" : "CMD + V",
"os" : "All"
}
},
libraryKeys:null
};
};
子組件:
componentDidMount(){
this.SetUpItemsHandler();
};
componentWillReceiveProps(){
this.SetUpItemsHandler();
}
deleteClickHandler(e){
console.log("delete Button Clicked");
};
SetUpItemsHandler(){
var libraryKeys = Object.keys(this.props.library);
document.getElementById("libraryInner").innerHTML = "";
for(var i = 0;i < libraryKeys.length;i++){
document.getElementById("libraryInner").innerHTML += "<li key={i}>"+
"<h2>Name: "+ this.props.library[libraryKeys[i]].name +"</h1>"+
"<button onClick={this.deleteClickHandler.bind(this ,i)}>Delete</button>"
"</li>";
};
};
The onClick={this.deleteClickHandler.bind(this)}
事件控制檯觸發一個錯誤:
(index):16 Uncaught TypeError: Cannot read property 'bind' of undefined(…)
我是否正確,包括密鑰值?我錯過了什麼? 我已經使用.map函數與數組,但我不確定理想的方式來做到這一點與json的關鍵對象,所以我試圖使用for循環。這是錯的嗎?
任何幫助,非常感謝。 謝謝 萌
編輯: 在我的渲染功能我都試過,包括但它沒有考慮,沒有顯示沒有在控制檯中的任何錯誤:
render(){
var listItems = function(){
var libraryKeys = Object.keys(this.props.library);
document.getElementById("libraryInner").innerHTML = "";
for(var i = 0;i < libraryKeys.length;i++){
document.getElementById("libraryInner").innerHTML += "<li key={i}>"+
"<h2>Name: "+ this.props.library[libraryKeys[i]].name +"</h1>"+
"<button onClick={this.deleteClickHandler.bind(this)}>Delete</button>"+
"</li>"
};
};
return(
<div>
Library Here<br/><br/>
<div id="library">
<ul id="libraryInner">
{listItems}
</ul>
</div>
<AddItemForm
inputUpdateHandler={this.props.inputUpdateHandler.bind(this)}
nameInputUpdateHandler={this.props.nameInputUpdateHandler.bind(this)}
inputInputUpdateHandler={this.props.inputInputUpdateHandler.bind(this)}
osInputUpdateHandler={this.props.osInputUpdateHandler.bind(this)}
addItemHandler={this.props.addItemHandler.bind(this)}
/>
</div>
);
}
由於您操縱直接HTML,並且它不知道綁定,所以使用綁定HTML應該使用反應html元素生成。你爲什麼不使用渲染方法呈現html? – abhirathore2006
我已經編輯了一個更新的帖子,我在渲染函數中包含了函數。它沒有采取。沒有任何控制檯錯誤沒有顯示。 –
檢查我的回答 – abhirathore2006