我有一個小問題,而試圖創建一個選擇和取消選擇其他個人複選框複選框管理狀態(選擇/取消全部)配有React。我讀過http://facebook.github.io/react/docs/forms.html,發現有「控制」和「不可控」 <input>
S之間的差異。我的測試代碼如下:陣營(臉譜):受控複選框
var Test = React.createClass({
getInitialState: function() {
return {
data: [
{ id: 1, selected: false },
{ id: 2, selected: false },
{ id: 3, selected: false },
{ id: 4, selected: false }
]
};
},
render: function() {
var checks = this.state.data.map(function(d) {
return (
<div>
<input type="checkbox" data-id={d.id} checked={d.selected} onChange={this.__changeSelection} />
{d.id}
<br />
</div>
);
});
return (
<form>
<input type="checkbox" ref="globalSelector" onChange={this.__changeAllChecks} />Global selector
<br />
{checks}
</form>
);
},
__changeSelection: function(e) {
var id = e.target.getAttribute('data-id');
var state = this.state.data.map(function(d) {
return {
id: d.id,
selected: (d.id === id ? !d.selected : d.selected)
};
});
this.setState({ data: state });
},
__changeAllChecks: function(e) {
var value = this.refs.globalSelector.getDOMNode().checked;
var state = this.state.data.map(function(d) {
return { id: d.id, selected: value };
});
this.setState({ data: state });
}
});
React.renderComponent(<Test />, document.getElementById('content'));
「全局選擇」按預期工作:選擇時,選擇了其他所有檢查。問題在於__changeSelection()處理程序在單擊其他複選框之一時未觸發。
我不知道是什麼使這項工作的正確方法。也許React模型並不是模擬這種互動的最佳模型?我能做什麼?
在此先感謝
謝謝,這解決了這個問題。我完全忘了'這個'綁定。既然我們正在討論綁定,爲什麼使用這個.__ changeSelection.bind(this,d.id)而不是這個.__ changeSelection(id)?我承認這個「綁定」對我來說是新事物(現在我正在學習React)。 –
@馬修斯 - EMM使用'這.__ changeSelection(ID)'會立即調用該函數(例如渲染時)。我們只是想傳遞函數的引用,以便可以在'onChange'事件後面調用它。例如,如果你輸入'console。日誌「在你的瀏覽器控制檯中,它會打印出這個函數,但是如果你鍵入'console.log()'它會觸發實際的函數。 'anyFunc.bind(this,arg)'會創建一個綁定到'this'的新函數,並將所有傳入原函數的參數前置,但不會調用它。 –
我正在嘗試使用'checked:@ props.checkAll'來設置複選框的狀態,它按預期工作。但是,設置此屬性後,我無法手動檢查/取消選中。刪除這個屬性後,我可以手動執行 – vipin8169