我是react-native的业余爱好者,我似乎无法理解我的代码在下面发生的事情:我可以在控制台上将Promise中的“数据”记录为问题,但是当我尝试时使用this.setState将状态设置为“ liked”和“ likedBack”,似乎它们与初始状态并没有真正的变化。在componentWillMount()
内部调用此函数。对我在这里做错的任何想法吗?任何提示都会有很大帮助。
getMatchesUid= (uid, idPet)=>{
Ofirebase.database().ref('relationships').child(uid).child('pets').child(idPet).on('value', snap=>{
const relations = snap.val()
const allMatchesUid = this.getOverlap(relations.liked,relations.likedBack)
console.log('allMatches', allMatchesUid)
this.stateFunction(this.state.matches, allMatchesUid)
const promiseliked = allMatchesUid.map(profileUid =>{
firebase.database().ref('relationships').child(uid).child('pets').child(idPet).on('value', snap=>{
const matches = snap.val()
const liked = this.getValue(uid, profileUid, idPet, 'liked')
return (liked)
})
const promiselikedBack = allMatchesUid.map(profileUid=>{
const likedBack = this.getValue(uid, profileUid, idPet, 'likedBack')
return (likedBack)
})
Promise.all(promiseliked).then(data =>
this.setState({
liked: data,
}))
this.setState({
liked: data
}))
Promise.all(promiselikedBack).then(data => this.setState({
likedBack: data,
}))
答案 0 :(得分:2)
首先不要使用componentWillMount()
来设置状态。 componentWillMount()
在初始化(渲染)组件之前被调用,因此无法在未初始化的组件上设置状态,请使用componentDidMount()
并设置状态,请查看以下链接以获取与此相关的更多信息,
https://vasanthk.gitbooks.io/react-bits/anti-patterns/04.setState-in-componentWillMount.html