【发布时间】:2021-01-26 19:45:44
【问题描述】:
新的反应并被困在下面;我尝试了几种不同的方式来编写它,结果总是在constructor(props) 中的第一个听写“fruit”是undefined 时出错。我只是想创建一个有效的下拉选择,在反应中捕获选定的值。
文件一,/App.js
import React from 'react'
import {ReactExample} from './index'
import './App.css'
class BooksApp extends React.Component {
constructor(props) {
super(props);
this.state = { fruit: props.item.fruit }; <-------- errors
}
handleChange = (event) => {
this.setState({ [event.target.name]: event.target.value });
}
saveItem = () => {
const item = {};
item.fruit = this.state.fruit;
}
render() {
return (
<div className="app">
/* ...other HTML etc*/
<ol className="books-grid">
<li>
<div className="book">
<div className="book-top">
<div className="book-cover" style={{ width: 128, height: 193, backgroundImage: 'url("workingAPIURL")' }}></div>
<div className="book-shelf-changer">
<ReactExample name="fruit" value={this.state.fruit} handleChange={this.handleChange} />
</div>
</div>
</div>
</li></ol></div>
/* ...other HTML etc*/
}
export default BooksApp
第二个文件,index.js
import React from 'react'
import ReactDOM from 'react-dom'
import App from './App'
import './index.css'
ReactDOM.render(<App />, document.getElementById('root'))
export const ReactExample = ({ name, value, handleChange }) => (
<select name={name} value={value} onChange={handleChange}>
<option value="move" disabled>Move to...</option>
<option value="currentlyReading">Currently Reading</option>
<option value="wantToRead">Want to Read</option>
<option value="read">Read</option>
<option value="none">None</option>
</select>
)
【问题讨论】:
-
该错误意味着
props.item不存在,即组件未传递item属性的值。确实如此:<App />。您没有设置item。如何解决这个问题取决于您希望组件如何工作:not 传递item是否有效?如果是,那么您必须在访问它之前检查它是否已设置。如果它无效,那么您实际上必须传递一些数据。
标签: reactjs class ecmascript-6 constructor