如何在反应原生 Firestore 中过滤 TRUE FALSE 选项
Posted
技术标签:
【中文标题】如何在反应原生 Firestore 中过滤 TRUE FALSE 选项【英文标题】:How filter TRUE FALSE option in react native firestore 【发布时间】:2022-01-10 02:31:50 【问题描述】:我做了一个过滤器,即男人可以看到女人,女人可以看到男人 这意味着 用户数据有 ShowMen : true for women user ShowWomen : 适用于男性用户
当从 firestore 获取快照时 它将返回配置文件状态
const [profiles,setProfiles] = useState([]);
useEffect(() =>
let unsub;
const fetchCards = async()=>
unsub = onSnapshot(collection(db,'users'),
snapshot=>
setProfiles(
snapshot.docs
.filter(doc=>
((doc.id!==user.uid)&&(doc.showMen==true&&doc.gender==='male'))
|| ((doc.id!==user.uid)&&(doc.showWomen==true&&doc.gender==='female'))
)
.map(
doc=>(
id :doc.id,
...doc.data()
)
)
)
)//not show already pass/swipe users
fetchCards();
return unsub;
, [])
我无法过滤掉我想要的 doc.id !== user.uid 表示经过身份验证的用户无法在搜索列表中看到他的个人资料视图 之后,如果来的数据是 showMen true 并且性别为女性,则配置文件数组列表会得出这个结果并显示数据 如果来的数据是 showWomen true 和 gender male ,profile 数组会得出这个结果并显示数据
最后我想要的是
如果用户选择 ShowMen 选项为真,她将只看到男性 如果用户选择 ShowWomen 选项为真,他将只看到女性
如何在 filter() 中实现这个逻辑 有人能帮我吗 我需要这个 谢谢
【问题讨论】:
【参考方案1】:此数据过滤应在后端完成,以避免下载不必要的文档。
为了让我们的生活更轻松,让我们重新定义我们的user
数据模型如下:
s_989777:
age: 25,
displayName: "Roberto Carlos",
gender: "male",
interestedIn: "female",
,
ab9uyrtt:
age: 21,
displayName: "Christina Liz",
gender: "female",
interestedIn: "male",
,
;
我添加了新记录interestedIn = [gender]
。此值应等于现有用户的gender
之一。 male
或 female
。
有了这个新的数据模型,我们可以使用 Firestore 过滤查询。
import collection, query, where,getDocs from "firebase/firestore";
const usersRef = collection(db, "users");
// Create a query against the collection.
const interestedIn = currentUser.interestedIn
const q = query(usersRer, where("gender", "==", interestedIn));
const querySnapshot = await getDocs(q);
querySnapshot.forEach((doc) =>
// doc.data() is never undefined for query doc snapshots
console.log(doc.id, " => ", doc.data());
);
结果将是gender
用户当前感兴趣的用户数组
【讨论】:
可以直接定义const interestedIn = currentUser.interestedIn
不带快照吗,是未定义吗?
const interestedIn = currentUser.interestedIn
假设当应用程序加载或用户登录时,您会加载有关该用户的信息并保存在全局存储或异步存储中。 `currentUser` 是当前正在使用应用的用户信息的占位符。
简单地通过你的想法得到答案。谢谢
很高兴听到这个消息。这是我在 *** 上的第一个答案。联系我了解未来的一些与 Firebase 相关的问题。同时,祝黑客愉快!以上是关于如何在反应原生 Firestore 中过滤 TRUE FALSE 选项的主要内容,如果未能解决你的问题,请参考以下文章