小编典典

为什么 .filter 方法在我的 Expo 应用程序中没有做任何事情?

all

我正在使用 Expo 构建一个应用程序,并尝试将过滤器应用于 fetchUsers 函数,该函数从数据库中提取与经过身份验证的用户匹配的用户列表。我正在使用 AWS 作为后端。但是,当我执行 fetchedUsers.filter 时,它不会返回任何用户卡。

所以我有一个函数 fetchMatches ,它可以像这样提取所有与经过身份验证的用户匹配的用户:

useEffect(() => {
  if (!me) {
      return;
  }
  fetchMatches();

 }, [me]);

 const fetchMatches = async () => {
    const result = await DataStore.query(Match, match => 
      match
      .isMatch('eq', true)
      .or(match => match.matchUser1Id('eq', me.id).matchUser2Id('eq', me.id))
      );
  setMatches(result);
  console.warn(result);

}

然后我有一个函数 fetchUsers 获取匹配项并将它们过滤到匹配的用户 id 并将它们与获取的用户 id 进行比较,如果 userId 等于匹配的用户 id 则将它们排除在外,这样你就不必在某人身上刷卡你’已经匹配了。

useEffect(() => {

  if(!isUserLoading && user) {
    fetchUsers();
  }
}, [me, matches, user]);

const fetchUsers = async () => {
  let fetchedUsers = await DataStore.query(User);

    setUsers(fetchedUsers.filter(user => {
      matches.filter(match => 
        match.matchUser1Id !== user.id && match.matchUser2Id !== user.id
      )
    }));
}

因此,当我将此过滤器应用于 fetchedUsers 时,没有用户卡返回到主屏幕。但是,当我删除过滤器并仅执行 setUsers(fetchedUsers) 时,它会从数据库中返回整个用户数组。截至目前,控制台中没有出现任何未处理的承诺或任何类型的错误。它只是不渲染。我正在使用世博会。任何帮助,将不胜感激!


阅读 62

收藏
2022-07-09

共1个答案

小编典典

不要使用嵌套的filter(),用于some()执行测试。而且您需要返回该结果,所以不要{}绕开它。

setUsers(fetchedUsers.filter(user =>
  matches.some(match =>
    match.matchUser1Id !== user.id && match.matchUser2Id !== user.id
  )
));
2022-07-09