저는 ReactJS를 배우고 있습니다. 그러나 나는이 오류를 발견하지 못했습니다.ReactJS - 정의되지 않은 'items'속성을 읽을 수 없습니다.
하위 구성 요소에서 부모의 items
배열 상태를 변경하고 싶습니다. addItem
함수를 보조 컴포넌트로 children
컴포넌트에 전달하려고 시도했습니다. 입력 할 때, children 컴포넌트는이 함수를 호출하고 입력 값을 전달합니다.
addItem 메소드에서 console.log(this.state.items)
을 시도하면이 오류가 발생합니다.
Uncaught TypeError: Cannot read property 'items' of undefined
홈페이지 App.js
class App extends Component {
constructor() {
super();
this.state = {
items: []
};
}
render() {
return (
<div className="App">
<p>Todo List</p>
<AddItemBox addNewItem={this.addItem}/>
<ItemsList items={this.state.items}/>
</div>
);
}
addItem(item) {
var listItems = this.state.items;
listItems.push(item);
this.setState({items: listItems});
}
}
하위 구성 요소 : AddItemBox.js
class AddItemBox extends Component {
constructor(props) {
super(props);
this.state = {
item: '' // input value
};
}
render() {
return (
<div className='AddItemBox'>
<input type='text' placeholder='add item' onChange={e => {
this.onInputChange(e.target.value)
}} onKeyPress={e => {
if (e.key === 'Enter') {
this.onInputEnter(e.target.value)
}
}}/>
</div>
);
}
onInputChange(item) {
this.setState({item});
}
onInputEnter(item) {
// Now add it to the 'items' array state
this.props.addNewItem(item);
this.setState({item: ''});
}
}
생성자에서 다음을 수행하십시오 :'this.addItem = this.addItem.bind (this)' – Li357
@AndrewLi 오우 와우! 좀 더 설명해 주시겠습니까? 고맙습니다! – narulakeshav
'bind' 함수는'this' 참조를 클래스 자체 (또는 그 당시의'this')로 변경하여'state'를 참조 할 수 있습니다. 그것이 없다면,'this'는 함수를 호출 한 것을 참조합니다. –