현재 취하고있는 접근 방식은 실제로 "반응"하지 않습니다. dom을 직접 변경하는 대신 상태 변화에 대해 더 많이 생각해야합니다.
한 가지 방법은 다음과 같습니다
class App extends React.Component {
constructor(){
super();
this.state ={
visibleButtons: [ 11, 22, 33, 44 ],
buttons: {
11: {
label: "Foo",
},
22: {
label: "Bar"
},
33: {
label: "Cow",
},
44: {
label: "Pig"
},
},
}
}
onDelete(deletedId) {
this.setState({
visibleButtons: this.state.visibleButtons.filter(id => id !== deletedId)
});
}
render() {
return (
<div>
{ this.state.visibleButtons.map(buttonId => (
<button key={buttonId} onClick={() => this.onDelete(buttonId)}>{this.state.buttons[buttonId].label}</button>
)) }
</div>
);
}
}
ReactDOM.render(<App/>,document.getElementById('root'));
http://codepen.io/cjke/pen/RKwWwZ?editors=0010
편집
추가 및 제거 보여주는 예. 고유 ID가 매우 원시적이며, 적극적으로이 무엇인지를 확인하지 않습니다,하지만 당신은 요점 얻어야한다 : 모든
class App extends React.Component {
constructor(){
super();
this.onAdd = this.onAdd.bind(this);
this.onChange = this.onChange.bind(this);
this.state ={
value: '',
uniqueId: 100,
visibleButtons: [ 11, 22, 33, 44 ],
buttons: {
11: {
label: "Foo",
},
22: {
label: "Bar"
},
33: {
label: "Cow",
},
44: {
label: "Pig"
},
},
}
}
onDelete(deletedId) {
this.setState({
visibleButtons: this.state.visibleButtons.filter(id => id !== deletedId)
});
}
onChange(e) {
this.setState({ value: e.target.value });
}
onAdd(e) {
this.setState({
uniqueId: this.state.uniqueId + 1,
value: '',
buttons: {
...this.state.buttons,
[this.state.uniqueId]: {
label: this.state.value,
}
},
visibleButtons: [...this.state.visibleButtons, this.state.uniqueId],
});
}
render() {
return (
<div>
<div>
{ this.state.visibleButtons.map(buttonId => (
<button key={buttonId} onClick={() => this.onDelete(buttonId)}>{this.state.buttons[buttonId].label}</button>
)) }
</div>
<br/>
<div>
<input onChange={this.onChange} value={this.state.value}/><button onClick={this.onAdd}>+</button>
</div>
</div>
);
}
}
ReactDOM.render(<App/>,document.getElementById('root'));
이'이 시도에 접근하지 않도록해야합니다. delete_me.bind (this)' – uzaif
당신은 this를 위해 상태를 사용해야합니다. 그래서 this.buttons가 아니라 setstate를 통해 this.state.buttons가됩니다. – Chris
@uzaif 아, 나는 생성자에서 그것을 한 것을 잊어 버렸습니다. 사물을 분명히하기 위해 그것을 추가 할 것입니다. –