2
확인란 목록이 있습니다. 사용자가 선택하거나 선택 취소 할 때 개체 배열을 업데이트 할 수 있습니다. 하지만 한 가지 문제가 있습니다. 다른 값은 상태를 업데이트해도 변경되지 않습니다.상태가 업데이트되었지만 반응이 UI에서 반사를 나타내지 않았습니다.
http://jsbin.com/qomekohile/1/edit?js,console,output
class HelloWorldComponent extends React.Component {
constructor(){
super()
this.handleChange = this.handleChange.bind(this);
this.state = {
"fruits":[
{"name":"banana","value":true},
{"name":"watermelon","value":false},
{"name":"lemon","value":true},
{"name":"other","value":true,"other_value":"Durian"}
]
}
}
handleChange(e,key){
let nxState = Object.assign({}, this.state)
nxState.fruits.find(obj => {
if (obj.name === key) {
obj.value = e.target.checked
if(obj.name === 'other' && obj.value === false){
obj.other_value = ''; //why this won't work
}
return true
} else {
return false
}
});
this.setState(nxState)
}
render() {
return (
<div>
{this.state.fruits.map(obj =>
(obj.name === 'other') ?
<div>
<label>{obj.name}</label>
<input onChange={(e) => this.handleChange(e, obj.name)} type="checkbox" defaultChecked={obj.value} />
<input type="text" defaultValue={obj.other_value} />
</div>
:
<div key={obj.name}>
<label>{obj.name}</label>
<input onChange={(e) => this.handleChange(e, obj.name)} type="checkbox" defaultChecked={obj.value} />
</div>
)}
<br />
<pre>{JSON.stringify(this.state.fruits,null,2)}</pre>
</div>
);
}
}
나는 경고와 함께 'value와 defaultValue props 두 가지 유형의 텍스트 입력을 포함한다' – Mellisa
나쁘다. 답변이 업데이트되었습니다. –
아 이것은 더 우아하고 멋집니다! (비록 내가 왜 문제가 실제로 존재하는지 잘 모르겠다.) 그래서 문제는 Object.assign에 의해 발생한다. – Mellisa