无法读取 null 的属性 - React.js 状态

Coh*_*chi 0 setstate firebase reactjs

我正在尝试使用 React 和 Firebase 制作一个待办事项列表应用程序。

这是一个单页应用程序(登录除外)。在我的页面组件中,我调用列表组件。在我的列表组件中,我获取了放入状态的 firebase 数据。在 React Dev Tool 的 List 组件中,我可以看到如下状态:

list{items{...},listName:"exemple"}
Run Code Online (Sandbox Code Playgroud)

因此,在我的返回中,我尝试显示 listName 的值,如下所示:{this.state.list.listName} 但出现以下错误::无法读取'listName'null 的属性

这是我的列表的组件:

  class ListPage extends Component {
      constructor(props) {
    super(props);

    this.state = {
      list: null,
    };
      }
      componentDidMount() {
    this.listRef = db.ref(`users/${this.props.user.uid}/lists
    ${this.props.cle}`);
    this.listRef.on('value', data=>{
        this.setState({
            list: data.val()
        })
    })
    }
     render() {
    return (
      <div>
        <h1>List : {this.state.list.listName}</h1>
      </div>
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

我哪里错了?

谢谢

Jay*_*444 5

原因是因为当您的组件首次安装时,状态列表为空。仅当异步 Firebase 响应返回时,它才会加载数据并变为非空。解决方案是检查它是否为空,因此在您的render()函数中更改这部分:

<h1>List : {this.state.list.listName}</h1>
Run Code Online (Sandbox Code Playgroud)

对此:

{ this.state.list && <h1>List : {this.state.list.listName}</h1> }
Run Code Online (Sandbox Code Playgroud)

一般来说,最好在访问对象的属性之前检查对象是否已定义。特别是那些你在某些时候明确定义为空的。