首页 > 解决方案 > 如何从反应原生 flatList 中的另一个函数中获取价值?

问题描述

我正在尝试过滤掉被阻止用户的帖子。处理它的最佳方法是什么?由于状态更新使应用程序滞后。这就是我接近它的方式:

我做了一个功能来检查用户是否被阻止

checkBlocked = async userId => {
  try {
  let snapshot = await firebase.database().ref('Blocked/' + firebase.auth().currentUser.uid).orderByChild('uid').equalTo(userId).once('value')
    return snapshot.exists();
  }
  catch(error) {
    return false;
  }
}

然后在平面列表中,我试图过滤来自被阻止的用户的帖子。

<FlatList
        inverted
        extraData={this.state.blocked}
        data={this.state.arrData}
        keyExtractor={item => item.key}
        renderItem={({ item }) => {
         
         
          this.checkBlocked(item.id).then(val => this.setState({blocked: val}));
         
            if(this.state.blocked == true){
              return (
                 //something )
            }

          else {
             
          return (

           //something 
             
     

       )}

      }}
     
      />

标签: javascriptreactjsfirebasereact-nativefirebase-realtime-database

解决方案


您不能像这样从 render 方法启动异步操作(例如从 Firestore 加载数据)。你应该:

  1. 在 render 方法之外启动异步操作。
  2. 当您从该操作中获得结果时,将其置于组件的状态。
  3. 这将触发组件的重新渲染,其中 render 方法可以从状态中获取数据。

在此处查看我的答案以获取示例:React Not Updating Render After SetState


推荐阅读