【问题标题】:How to conditionally render 'Where' statements in a Firestore query? [duplicate]如何在 Firestore 查询中有条件地呈现“Where”语句? [复制]
【发布时间】:2021-03-01 22:36:35
【问题描述】:

在下面的代码中是否可以有条件地渲染 Where 语句(基于现有的变量)?

useEffect(() => {
        const getProducts = projectFirestore.collection(collection)
            .where("color", "==", `${urlColor}`)
            .where("size", "==", `${urlSize}`)
            .onSnapshot((snap) => {
                ...
            })

            return () => getProducts();

    },[collection])

    return { docs };
}

我从 URL 参数中提取了“urlColor”和“urlSize”,但它们仅在用户选择该选项时才存在。我想要功能喜欢

if (urlColor && .where("size", "==", `${urlSize}`))

非常感谢任何帮助,马特

【问题讨论】:

    标签: javascript firebase google-cloud-firestore


    【解决方案1】:

    是的,您只需要一路保存一个临时变量。

    useEffect(() => {
      let query = projectFirestore.collection(collection)
    
      if (urlColor) {
        query = query.where("color", "==", `${urlColor}`);
      }
    
      if (urlSize) {
        query = query.where("size", "==", `${urlSize}`)
      }
    
      const unsubscribe = query.onSnapshot((snap => {
        ...
      });
    
      return () => unsubscribe();
    });
    

    【讨论】:

    • 出于好奇,我想知道您是否会尝试在每次添加where 时不重置query = ,并查看where 是否应用于原始对象
    • Laravel 查询,例如,有类似的机制,但你不必每次添加 where 时都做 query =,原来的 query 存储了你添加的所有内容
    • @TKoL 我不知道.where 是否会改变对象然后返回自身,或者是否会创建一个新对象。所以你的建议可能有效,但我不确定。
    • @NicholasTower 非常感谢,效果非常好
    猜你喜欢
    • 2018-07-08
    • 2021-05-31
    • 1970-01-01
    • 2021-11-15
    • 1970-01-01
    • 2020-09-07
    • 2017-06-05
    • 1970-01-01
    • 2021-02-24
    相关资源
    最近更新 更多