具有firebase实时数据库的setState in native native

时间:2018-02-27 22:09:26

标签: react-native

我在iOS原生开发方面有经验,现在我正在尝试使用react-native构建我的第一个应用程序。

当我从firebase数据库接收数据时,我正在尝试setSate:

state = {
remainingSeconds: 5,
dataArray: [],
};

componentDidMount() {
// Get data from firebase
this.getData(); 
}

getData() {
// Set the configuration for your app
var config = {
  apiKey: "XXXXXX",
  authDomain: "XXXXXXX",
  databaseURL:  "XXXXXXX",
  storageBucket: ""
};
firebase.initializeApp(config);

// Get a reference to the database service
var database = firebase.database();

// Get data
var usersRef = firebase.database().ref('Users');
usersRef.on('value', function(snapshot) {

  this.setState({
    dataArray: snapshot.val()
  })
});
};

我收到以下错误:

enter image description here

任何人都可以提供帮助吗?

先谢谢你。

2 个答案:

答案 0 :(得分:3)

看起来问题是您调用setState的回调函数与父函数的上下文不同。

您需要做的就是将回调函数从标准函数声明转换为箭头函数。

// Get data
var usersRef = firebase.database().ref('Users');
usersRef.on('value', (snapshot) => {
  this.setState({
    dataArray: snapshot.val()
  })
});

这应该为您提供正确的上下文,以便this在回调函数中与在父函数中的含义相同。

答案 1 :(得分:0)

我相信你已经失去了对这个'这个'因为范围。

不是最漂亮的解决方案,但我希望这可能有所帮助:

var expression = new Action<DataSourceSortDescriptorFactory<TModel>>(x =>
        {
            foreach (var sort in sorts)
            {
                if (sort.SortDirection == System.ComponentModel.ListSortDirection.Ascending)
                {
                    x.Add(sort.Member).Ascending();
                }
                else
                {
                    x.Add(sort.Member).Descending();
                }
            }
        });