【问题标题】:react constructor var undefined (cannot read of undefined)反应构造函数 var undefined (无法读取未定义的)
【发布时间】: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 属性的值。确实如此:&lt;App /&gt;。您没有设置item。如何解决这个问题取决于您希望组件如何工作:not 传递item 是否有效?如果是,那么您必须在访问它之前检查它是否已设置。如果它无效,那么您实际上必须传递一些数据。

标签: reactjs class ecmascript-6 constructor


【解决方案1】:

您还没有在 index.js 中为 App 组件定义任何道具。这可以通过这种方式完成:

<App item={ fruit: 'yourValue' }/>

如果您不想将值作为道具传递,您可以像这样在构造函数中简单地初始化状态:

constructor(props) {
    super(props);
    this.state = { fruit: 'yourValue' };
  }

我还建议以相同的方式命名组件及其默认导入。在 index.js 中将 BooksApp 作为 App 导入有点令人困惑。

【讨论】:

  • 仍然对它的实现有点困惑。那么,我在您的第一个建议中将我的选项标签替换为应用项目?
  • 我不确定你的问题是什么意思。我建议查看官方 React 文档以了解如何使用输入和表单:reactjs.org/docs/forms.html.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-30
  • 1970-01-01
  • 1970-01-01
  • 2022-10-08
  • 1970-01-01
  • 2018-08-24
  • 2022-01-25
相关资源
最近更新 更多