Reactでちょうど降りてください。小道具はアクセス可能に見える。 Inventory.jsの "this"が気に入らないようです。私は間違って何をしていますか?Reactで小道にアクセスする:プロパティを読み取ることができません***未定義の
App.js
import React, { Component } from 'react';
import logo from './logo.svg';
import './App.css';
import Inventory from './Inventory';
import ChangeForm from './ChangeForm';
class App extends Component {
constructor() {
super();
this.addEntryToState = this.addEntryToState.bind(this);
this.state = {
entries: {},
};
}
addEntryToState(entry) {
const entries = {...this.state.entries};
const timestamp = Date.now();
entries[`entry-${timestamp}`] = entry;
this.setState({ entries: entries })
}
render() {
return (
<div className="App">
<div className="App-header">
<img src={logo} className="App-logo" alt="logo" />
<h2>Welcome to React</h2>
</div>
<p className="App-intro">
To get started, edit <code>src/App.js</code> and save to reload.
</p>
<ChangeForm addEntryToState={this.addEntryToState} entries={this.state.entries} />
<Inventory entries={this.state.entries} />
<p></p>
</div>
);
}
}
export default App;
Inventory.js
import React from 'react';
class Inventory extends React.Component {
render() {
return (
<div>
<h2>Inventory</h2>
<p>{this.props.entries[0].name</p>
<p>{this.props.entries <-----*********** how to display? ****}</p>
<p>table removed because errors</p>
</div>
)
}
}
export default Inventory;
ChangeForm.js
import React from 'react';
class ChangeForm extends React.Component {
createEntry(event) {
event.preventDefault();
const entry = {
name: this.name.value,
quantity: this.quantity.value,
size: this.size.value,
}
this.props.addEntryToState(entry);
this.changeForm.reset();
}
render() {
return (
<div>
<h2>Change Form</h2>
<form ref={(input) => this.changeForm = input} onSubmit={(e) => this.createEntry(e)}>
<input ref={(input) => this.name = input} type="text" placeholder="name" />
<input ref={(input) => this.quantity = input} type="text" placeholder="quantity" />
<input ref={(input) => this.size = input} type="text" placeholder="size" />
<button type="submit">Submit</button>
</form>
</div>
)
}
}
export default ChangeForm;
エラーメッセージ:
TypeError: Cannot read property 'name' of undefined Inventory.render src/Inventory.js:11
8 |
9 | <div>
10 | <h2>Inventory</h2>
> 11 | <p>{this.props.entries[0].name}</p>
12 | <p>table removed because errors</p>
13 |
14 | </div>
View compiled ▶ 26 stack frames were collapsed. Object../src/index.js src/index.js:7
4 | import App from './App';
5 | import registerServiceWorker from './registerServiceWorker';
6 |
> 7 | ReactDOM.render(<App />, document.getElementById('root'));
8 | registerServiceWorker();
9 |
10 |
this.props.entries [0] ''定義されていないので、あなたはそのエラーを取得しています。そのプロパティを、 'name'プロパティを持つオブジェクトの空でない配列に設定していますか? – TW80000
'entries'をオブジェクトではなく*配列*として設定しましたか? – Li357
エントリオブジェクトをDOMに吐き出して、それが理にかなっていると、それがWebページ上で変化するのを見ることができるようにしたいと思います。どうすればいい?それを配列に変換しますか?最初のthis.state = {entries:{}、}に問題がある可能性があります。 – bjorn