我正在使用 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) 时,它会从数据库中返回整个用户数组。截至目前,控制台中没有出现任何未处理的承诺或任何类型的错误。它只是不渲染。我正在使用世博会。任何帮助,将不胜感激!
不要使用嵌套的filter(),用于some()执行测试。而且您需要返回该结果,所以不要{}绕开它。
filter()
some()
{}
setUsers(fetchedUsers.filter(user => matches.some(match => match.matchUser1Id !== user.id && match.matchUser2Id !== user.id ) ));