componentDidMount 中的 setState

setState inside componentDidMount

我正在尝试等待 componentDidMount 中的数据,然后将我的状态 isLoading 更改为 false,但 setState 未触发。我可以 console.log branch.init 中的数据,但我不知道为什么 setState 不起作用。

    state = {
      isLoading: true,
    }

    componentDidMount() {
      console.log("componentDidMount");

      let branchKeyTest = 'key_test_aBcDeF'

      branch.init(branchKeyTest, function(err, data) {
        console.log(JSON.stringify(data, null, 1))

        this.setState({ isLoading: false })

        if (data && data.data_parsed) {
          switch (data.data_parsed.link_type) {
            case 'new_release':
              localStorage.setItem('redirect', JSON.stringify({
                'link_type': 'new_release',
                'release_id': data.data_parsed.release_id
              }));
              break;
            default:
              console.log("do nothing")
          }
        }
      })
    }


  render() {
    const { isLoading } = this.state;
    if (!isLoading) {
      return (
        <div>Done Loading</div>
      )
    else {
      return (
        <div>Still Loading</div>
      )
    } 
  }

branch.init(branchKeyTest, function(err, data) { 需要更改为 branch.init(branchKeyTest, (err, data) => {,因为您无权访问匿名函数内的 class 的 this 关键字。

按照您的编写方式,您无权访问 this,因为 this 指的是函数的上下文 - 而不是 class。通过将其更改为粗箭头语法,您可以访问 this 以获取 React class 的上下文。

您可以阅读有关 this here 的更多信息。