使用 useTracker meteor subscribe 和 findOne 检查 !isLoading 和状态是否存在 mongo

Checking if !isLoading and state exists with useTracker meteor subscribe and findOne mongo

我通常可以在使用 isLoading 渲染反应组件时执行此操作,但是如果我尝试使用它来测试变量是否已准备就绪,它会抱怨地图未定义,即使在控制台中它肯定是一个数组我正在选择的值。 isLoading returns 有时未定义,我尝试检查 isLoading 是否为 !undefined ,所以我被卡住了。

const { leadsBuilder, isLoading } = useTracker(() => {
    const noDataAvailable = { leadsBuilder: [] };

    if (!Meteor.user()) {
      return noDataAvailable;
    }

    const handler = Meteor.subscribe("leadsBuilder");

    if (!handler.ready()) {
      return { ...noDataAvailable, isLoading: true };
    }

    const leadsBuilder = LeadsBuilderCollection.findOne({ _id: params._id });
    return { leadsBuilder };
  });

  if (!isLoading && leadsBuilder) {
    let stateReplace = [];

    leadsBuilder.inputs.map((leadInput, i) => {
      stateReplace.push({ id: i, text: leadInput.name });
    });
  }

您正在测试 leadsBuilder 是否真实,但是您在 leadsBuilder 的 属性 上调用 .map

您应该将您的条件替换为:

if(!isLoading && leadsBuilder?.inputs?.length) {
    //your code
}

?测试是否定义了变量/属性,然后我们使用length因为我们希望数组不为空