私はReactJSを学んでいますが、私は分かりませんが、このエラーに直面しました。ReactJS - 定義されていないプロパティ 'items'を読み取ることができません
子のコンポーネントから親のitems
配列状態を変更したいと考えています。 addItem
関数を小道具として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'は関数を呼び出したものを参照します。 –