class Equipments extends React.Component {
constructor(props) {
super(props);
arrayLength = props.data.length;
this.state = { isChecked: new Array(arrayLength).fill(false) };
this.onChange = this.onChange.bind(this);
}
onChange(id){
console.log("id",id)
var tempArray = this.state.isChecked;
// console.log("temparrayBeforechange",tempArray[id])
// tempArray[id] == true ? tempArray = false : tempArray = true;
tempArray[id] = !tempArray[id];
// console.log("temparrayAFTERchange",tempArray[id])
this.setState({isChecked: tempArray});
}
render(){
var label = this.state.isChecked ? console.log("TRUE") : console.log("FALSE");
console.log(this.state.isChecked)
return(
<div>
<h1> Equipments </h1>
<ul> {this.props.data.map(function(equipment){
return <span key={equipment.id}>
<form>
<label>
{console.log("id", equipment.id)}
<input
name="isChecked"
value={equipment}
type="checkbox"
checked={this.state.isChecked[equipment.id]}
onChange={this.onChange.bind(equipment.id)}
/>
<a href={'/equipment/' + equipment.id} > {equipment.name}</a>
{label}
</label>
</form>
</span>
},this)
}
</ul>
</div>
)
}
所以我們想你的編輯,但現在只有最後一個複選框作品,它只是切換到真實,不虛假。其餘的複選框甚至沒有顯示它們正在被選中,但正在擊中控制檯。
這就是this.state.isChecked正在打印:
[false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, [object Object]: true]0: false1: false2: false3: false4: false5: false6: false7: false8: false9: false10: false11: false12: false13: false14: false[object Object]
好像對象:真被附加到陣列,而不是訪問陣列中的相關數值。
此外,onChange當我打印ID它打印這個對象,我有點困惑我們如何使用它。
Proxy {dispatchConfig: Object, _targetInst: ReactDOMComponent, _dispatchInstances: ReactDOMComponent, nativeEvent: MouseEvent, type: "change"…}
所以我想我想就是弄明白,我們怎麼通過equipment.id到的onChange數組中訪問正確的值,將其從真更改爲false,反之亦然?
**幾點建議**:1.您需要通過'this.state.a.slice()'創建'狀態數組'的副本,然後執行其他操作,因爲通過將數組直接分配給任何變量,var將得到'array'的引用,並且它將直接對原始'array'進行所有更改,並且'state'值只能由'setState' 2更改。而不是使用'equipment.id',您可以使用'array index' :) –
這個slice()的東西解決了我過去曾經遇到過的很多神祕的問題,謝謝。另外,如何訪問設備陣列的索引? – boyde712
'this.props.data.map(function(equipment,index)',現在用這個索引代替'equipment.id'。 –