所以,让我们谈谈组件React的生命周期。
我的模型文件名称是Firebase.js
里面我的所有方法都可以触发我的数据。
Firebase.js
export const getUserShare = () => {
let arr = [];
db.ref(`/music/${userID()}`).on("value", (snapshot, key) => {
snapshot.forEach(items => {
let element = items.val();
arr.push(element);
});
});
return arr;
};

我有一个Profil.js
组件,在里面我导入了我想要的方法(对于这个例子_getUserData()
)
在我的组件上,我设置了一个状态arrSharing
,名为my _getUserData()
,这个输出是一个包含我所有数据的数组。
Profil.js
:
this.state = {
arrSharing: getUserShare()
};

Profil.js
只能通过我的路由器访问,或者如果您将链接放在浏览器上。
现在我在渲染函数中渲染数据:
{this.state.arrSharing.map((items, i) => {
return (
<div key={i} className="share-music">
<h5 className="share-music__title">
{items.artiste} - {items.title}
</h5>
<p className="share-music__platform">
par {items.displayName} sur #{items.radio}
</p>
</div>
);
})}
&#13;
现在运行应用程序,如果我第一次在Profil.js
组件上没有加载数据,但是如果我继续使用另一个组件,并且在我返回Profil.js
后数据被加载。
问题来自组件第一次不渲染。当我使用componentDidMount()
时,我遇到了同样的问题。这对我的案子来说很成问题。
答案 0 :(得分:1)
我发现异步操作处理存在问题。
更改您的getUserShare
方法以接受回调:
export const getUserShare = (callback) => {
db.ref(`/music/${userID()}`).on("value", (snapshot, key) => {
const arrSharing = [];
snapshot.forEach(items => {
let element = items.val();
arrSharing.push(element);
});
callback(arrSharing);
});
};
然后在 Profile.js :
中执行此操作this.state = {
arrSharing: [],
}
componentDidMount() {
getUserShare((arrSharing) => {
this.setState({ arrSharing })
})
}