javascript - 我有一个 this.state ,我需要用 setState 传入我的 componentDidMount ,如何在 setState 中使用 bind(this) ?

标签 javascript reactjs firebase firebase-realtime-database setstate

我在setState中已经通过Bind了,怎么办? enter image description here

类型错误:无法读取未定义的属性“setState”

我正在使用 RealTime Firebase 和 ReactJs

constructor() {
    super()
    this.app = firebase.initializeApp(firebase_config);
    this.database = this.app.database().ref().child('users');
    this.state = {
        users: []
    }
}
componentDidMount() {
  this.database.once("value", function(snapshot) {
      snapshot.forEach(function(data) {
          this.setState({users: data.val()})
      })
  });
}

render() {
   return (
    <BrowserRouter>
       <div className="App">
          <Navbar/>
          <Switch>
            <Route exact="exact" path='/' component={CampaingListClients}/>
          </Switch>
          <p>{this.state.users}</p>
       </div>
    </BrowserRouter>);
    }
}

类型错误:无法读取未定义的属性“setState”

最佳答案

您可以通过两种方式解决 setState 未定义问题

  1. 将函数更改为箭头函数

    componentDidMount() {
        this.database.once("value", snapshot => {
           snapshot.forEach(data => {
              this.setState({users: data.val()})
           })
        });
     }
    
  2. 像下面这样绑定(bind)每个函数

      componentDidMount() {
         this.database.once("value", function(snapshot) {
             snapshot.forEach(function(data) {
                 this.setState({users: data.val()})
             }.bind(this)}
         }.bind(this));
       }
    

关于javascript - 我有一个 this.state ,我需要用 setState 传入我的 componentDidMount ,如何在 setState 中使用 bind(this) ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54615829/

相关文章:

javascript - 如何让其他广告在 Google 网站上发挥作用?例如 Adbrite 代码未链接图片

javascript - 跳转 Onload jQuery

reactjs - 考虑到可以从键盘触发的 onClick 事件的 TypeScript 类型?

javascript - React 检测到 Hooks 的调用顺序发生了变化,但我看不到任何有条件调用的 hooks

ios - Firebase 将用户检索到 tableView

javascript - 尝试将 DOMParser 与 Node js 一起使用

javascript - Ember.js: native 输入类型 ="number"绑定(bind)在约束值时中断

javascript - Ra-data-simple-rest 不工作 |错误 : total is not a number and newRecords. forEach 不是函数

android - 如何解决Android项目中的ERROR : Failed to resolve: com. google.firebase :firebase-measurement-connector:11. 6.0?

java - Firebase 数据库检索顺序