items
배열을 포함하는 state
이있는 component
양식이 있습니다. item
입력 중 하나가 업데이트되면 양식의 state
을 업데이트하는 데 어려움을 겪고 있습니다. 처음에는 자신 항목에 state
을 만들고 다음 코드를 사용하여 값을 업데이트 한에서React - Forms - 하위 구성 요소 업데이트를 처리하는 방법
: 그러나
class ItemRow extends Component{
constructor(props){
super(props)
this.state = this.props.item;
}
updateItem(event) {
const target = event.target;
const value = target.type === 'checkbox' ? target.checked : target.value;
const name = target.name;
this.setState({
[name]: value
});
}
.....
render(){
return (
<FormControl
type="text"
name="name"
value={this.state.name}
onChange={this.updateItem}
/>
<FormControl
type="text"
name="price"
value={this.state.price}
onChange={this.updateItem}
/>
.....
)
}
}
이것은 입력의 값을 업데이트하기위한 좋은 일을의 state
는 로컬이었다 item
아니라 반사 또는 내가 form
의 state
을 유지하는 방법을 파악하고 item
갱신에게의 상태를 위해 노력하고있는 form
액세스
이것이 올바른 접근 방법이라고 생각하지만 어떻게 작동 시킬지 생각할 수 없습니다.
class Form extends Component{
this.state = {
items: [
{ name: 'soup', price: 7, quantity: 1 }
{ name: 'salad', price: 5, quantity: 2 }
]
}
updateItem(e) {
// Not sure how to handle updating
}
removeItem(item) {
let items = this.state.items;
items.splice(items.indexOf(item), 1);
this.setState({items: items})
}
render(){
return(
<ItemTable items={this.state.items} updateItem={this.updateItem} removeItem={this.removeItem} />
)
}
}
ItemTable :
class ItemTable extends Component {
removeItem(item){
this.props.removeItem(item)
}
render(){
let items = [];
this.props.items.forEach((item) => {
items.push(<ItemRow item={item} key={item.id} removeItem={this.removeItem.bind(this,item)} updateItem={this.props.updateItem}/>);
});
return(
{items}
)
}
}
ItemRow :
class ItemRow extends Component {
removeItem(item){
this.props.removeItem(item)
}
render() {
return (
<FormControl
type="text"
name="name"
value={this.props.item.name}
onChange={this.updateItem}
/>
<FormControl
type="text"
name="quantity"
value={this.props.item.quantity}
onChange={this.updateItem}
/>
<FormControl
type="text"
name="price"
value={this.props.item.price}
onChange={this.updateItem}
/>
<Button bsStyle="warning" onClick={this.removeItem}><Glyphicon glyph="trash"/></Button>
)
}
}
고마워, 작동 해! 대부분 올바른 방향으로 가고 있다는 약간의 검증과 조금 더 정확한 논리가 필요합니다. –