开发者问题收集

类型错误:无法读取 null 的属性“list”

2019-08-12
896

以下是导致错误的代码:

import React, { Component } from 'react'
import Header from './components/Header';
import Todo from './components/Todo';

class App extends Component {
  state: {
    list: [
      {
        title: "Take out trash",
        completed: false,
        id: 1
      },
      {
        title: "Take dog for walk",
        completed: false,
        id: 2
      },
      {
        title: "Doctor appointment",
        completed: false,
        id: 3
      }
    ];
  }

  render() {
    return (
      <div className="container">
        <Header number={this.state.list.length} />
        <Todo/>
      </div>
    )
  }
}

export default App

当我将数组作为 prop 传递给 header 时,消息显示无法读取“this”。但我不能这样做吗?如果关键字“this”在类组件中,为什么它未定义?

3个回答

您错误地设置了初始状态。

应该是:

class App extends Component {
  state = {
    list: [
      {
        title: "Take out trash",
        completed: false,
        id: 1
      },
      {
        title: "Take dog for walk",
        completed: false,
        id: 2
      },
      {
        title: "Doctor appointment",
        completed: false,
        id: 3
      }
    ];
  }

或者,您可以在构造函数方法中设置它,但这将实现相同的效果

Jonathan Irwin
2019-08-12

它是 state = { } 而不是 state: { }。

ImInYourCode
2019-08-12

在您的帖子标题中,您提到“list”会引发错误,而不是“this”。根据您所指的问题,潜在问题会有所不同。我怀疑 this.state 未定义,因此 this.state.list 会引发错误,因此我的回答基于该假设,直到澄清为止。

我通常在 constructor 中声明初始状态,例如

import React, { Component } from 'react'
import Header from './components/Header';
import Todo from './components/Todo';

class App extends Component {
  constructor(props) {
    this.state = {
      list: [
        {
          title: "Take out trash",
          completed: false,
          id: 1
        },
        {
          title: "Take dog for walk",
          completed: false,
          id: 2
        },
        {
          title: "Doctor appointment",
          completed: false,
          id: 3
        }
      ]
    }
  }

  render() {
    return (
      <div className="container">
        <Header number={this.state.list.length} />
        <Todo/>
      </div>
    )
  }
}

export default App

我在自己的 React Native 应用中使用了您的状态声明,并得到了相同的错误。按照我上面所做的方式初始化状态应该可以解决它。

Benjamin Godlove
2019-08-12