Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 反应-无法读取属性';标题';未定义的_Reactjs_React Props - Fatal编程技术网

Reactjs 反应-无法读取属性';标题';未定义的

Reactjs 反应-无法读取属性';标题';未定义的,reactjs,react-props,Reactjs,React Props,我遇到以下错误:在尝试加载我的页面时,无法读取undefined的属性“title” 这是我的密码: import resumeDataFr from './data/resumeDataFr' class App extends Component { state = { resumeDataFr: {} } componentDidMount () { this.handleLoadResumeData() } handleLoadResumeDat

我遇到以下错误:在尝试加载我的页面时,无法读取undefined的属性“title”

这是我的密码:

import resumeDataFr from './data/resumeDataFr'

class App extends Component {
  state = {
    resumeDataFr: {}
  }

  componentDidMount () {
    this.handleLoadResumeData()
  }

  handleLoadResumeData () {
    this.setState({ resumeDataFr: resumeDataFr })
  }

  render () {
    return (
      <div>
        <Header data={this.state.resumeDataFr.header} />
        <Treatment data={this.state.resumeDataFr.treatment} />
      </div>
    )
  }
}

App.propTypes = {
  data: PropTypes.object.isRequired
}

export default App
当只有标题组件被调用时,它就工作了,但当我添加处理组件时,它就不再工作了。我从应用程序中检查状态,看起来满足了:

这就是我的依赖性:

"dependencies": {
    "@testing-library/jest-dom": "^5.11.5",
    "@testing-library/react": "^11.1.0",
    "@testing-library/user-event": "^12.1.10",
    "prop-types": "^15.7.2",
    "react": "^17.0.1",
    "react-dom": "^17.0.1",
    "react-scripts": "4.0.0",
    "web-vitals": "^0.2.4"
  }
我不知道我做错了什么,非常感谢您的帮助。

当您执行
({data})
时,您正在解构该函数的输入参数(即,从该对象获取数据属性。我想您可能需要这样做:

const Treatment = (data) => {
并保持所有其他内容不变(例如引用data.title),或者可能是这样,以使用解构来获得要使用的属性,如title:

const Treatment = ({ title }) => {
  return (
    <div id='treatments' className='text-center'>
      <div className='container'>
        <div className='col-md-10 col-md-offset-1 section-title'>
          <h2>{title}</h2>
        </div>
      </div>
    </div>
  )
}
const-Treatment=({title})=>{
返回(
{title}
)
}

您正在访问resumeDataFr.treatment

<Treatment data={this.state.resumeDataFr.treatment} />
当你说data.title时 您调用未定义对象的标题

你可以像下面这样解决

<h2>{data?.title}</h2>
class App extends Component {
  state = {
    resumeDataFr: null
  }

  componentDidMount () {
    this.handleLoadResumeData()
  }

  handleLoadResumeData () {
    this.setState({ resumeDataFr: resumeDataFr })
  }

  render () {
    if(this.state.resumeDataFr)
       return null; // or show some loading
    return (
      <div>
        <Header data={this.state.resumeDataFr.header} />
        <Treatment data={this.state.resumeDataFr.treatment} />
      </div>
    )
  }
}
{data?.title}
或者你可以做下面的事情

<h2>{data?.title}</h2>
class App extends Component {
  state = {
    resumeDataFr: null
  }

  componentDidMount () {
    this.handleLoadResumeData()
  }

  handleLoadResumeData () {
    this.setState({ resumeDataFr: resumeDataFr })
  }

  render () {
    if(this.state.resumeDataFr)
       return null; // or show some loading
    return (
      <div>
        <Header data={this.state.resumeDataFr.header} />
        <Treatment data={this.state.resumeDataFr.treatment} />
      </div>
    )
  }
}
类应用程序扩展组件{
状态={
resumeDataFr:null
}
组件安装(){
this.handleLoadResumeData()
}
handleLoadResumeData(){
this.setState({resumeDataFr:resumeDataFr})
}
渲染(){
if(this.state.resumeDataFr)
返回null;//或显示一些加载
返回(
)
}
}

在加载数据之前,您可能还需要有一个默认状态或捕获空状态,但我认为我上面所说的是您的问题之一。因此,实际上这不是一个真正的“问题”,这是正确的react行为?我仍在学习它,因此感谢您的帮助,它解决了我的问题。这是行为,基本上它将渲染一次,componentdidmount将触发,因此您的默认状态值将被渲染,因此您应该处理它,这就是想法
class App extends Component {
  state = {
    resumeDataFr: null
  }

  componentDidMount () {
    this.handleLoadResumeData()
  }

  handleLoadResumeData () {
    this.setState({ resumeDataFr: resumeDataFr })
  }

  render () {
    if(this.state.resumeDataFr)
       return null; // or show some loading
    return (
      <div>
        <Header data={this.state.resumeDataFr.header} />
        <Treatment data={this.state.resumeDataFr.treatment} />
      </div>
    )
  }
}