开发者问题收集

从数据库获取数据后,setState 在 React Native 中不起作用

2018-12-20
453

这是我第一次使用 React Native,我正在使用 MangoDB,我将记录存储在数据库中并获取记录,现在我想在 Flatlist 中显示,需要 setState() 但是它抛出了未定义的错误

db.find({}, function (err, docs) {
      this.setState({ dataSource: docs });   
});

docs 是用户数组,我能够在控制台中打印数据,它可以工作,但问题是如何使用 setState 在数据源中设置这些数据。

1个回答

这与您调用 setState 的方式有关。函数上下文中的 this 并未指向组件类。解决该问题的一种方法是使用箭头函数:

db.find({}, (err, docs) => {
      this.setState({ dataSource: docs });   
});

如果不能使用箭头函数,则可以手动将函数绑定到外部上下文:

function cb (err, docs) {
      this.setState({ dataSource: docs });   
}

db.find({}, cb.bind(this));

JavaScript 中 this 关键字背后的逻辑在以下问题中有详细讨论: “this”关键字如何工作? 或者在这本 Kyle Simpson 撰写的精彩著作中: YDKJS:this 和对象原型

Gleb Kostyunin
2018-12-20