我有React Native的代码:
componentWillMount() {
shiftKeys = []; // need to clear previously set data or we will get dupicate array key errors
// get the current user from firebase
const userData = firebaseApp.auth().currentUser;
const profileRef = firebaseApp.database().ref('userdata').child(userData.uid);
profileRef.on('value', snapshot => {
if (snapshot.val().hasOwnProperty('licenseType') && snapshot.val().hasOwnProperty('licenseState') && snapshot.val().hasOwnProperty('distance')) {
this.setState({
licenseType: snapshot.val().licenseType,
licenseState: snapshot.val().licenseState,
distancePref: snapshot.val().distance,
});
console.log('State1', this.state.distancePref)
} else {
// redirect back to profile screens because we need three values above to search.
this.props.navigation.navigate('Onboarding1')
}
});
}
componentDidMount() {
console.log('State2', this.state.distancePref)
var geoQuery = geoFire.query({
center: [45.616422, -122.580453],
radius: 1000// need to set dynamically
});
我认为这是某种范围问题?
当我查看控制台日志时,状态1设置正确,但状态2没有打印任何内容。
在我的应用中,我需要查找用户距离偏好,然后使用它来运行查询。
如何将值从componentWillMount传递给componentDidMount?
答案 0 :(得分:1)
https://facebook.github.io/react/docs/react-component.html#the-component-lifecycle
componentWillMount中的setState - 糟糕的方式。您没有以这种方式解决问题,因为在componentDidMount之前状态不会更新(请参阅生命周期)。在构造函数中检查创建状态时的条件。 或者您可以使用redux解决问题。
答案 1 :(得分:0)
这个问题的根本问题与我不了解如何反应和反应原生渲染代码有关。
我试图从firebase获取用户信息,然后设置首选项,然后使用这些首选项来运行搜索。
我添加了redux和thunk,以便在用户有机会搜索时(和之前)单独处理和保存用户首选项。