【问题标题】:How do I check for data and stop code execution if it doesn't exist?如果数据不存在,如何检查数据并停止代码执行?
【发布时间】:2019-04-06 11:38:16
【问题描述】:

我有一个链接表(总共 5 个)。

链接1 链接2 链接3 链接4 链接5

前 2 个链接是动态的。有时有他们的数据,有时没有。

最后 3 个链接是静态的,并且始终显示。

动态链接的数据深深地嵌套在状态中。

例如:state.data.item.statics.footerLinks

footerLinks 是一个对象数组:

footerLinks [{name: "****",url: "****"},{name: "****",url: "****"}]

仅当footerLinks 存在时,我才需要解构state.props 对象以获取footerLinks。

const { footers } = state.data.item.footerLink;

问题是我还需要在检查后映射页脚以将“名称”键更改为“链接”(如果存在)。如果它不存在,我需要在映射之前立即停止代码,因为我无法映射 null 或 undefined。它会抛出一个错误。如果没有 footerLinks 并且仍然给我 3 个静态链接以在 UI 中显示,我无法弄清楚如何阻止代码到达地图。这是我到目前为止所拥有的:

这些是始终存在的静态链接:

const mainlinks = [ {label: "*******", url: "********"},{label: "*******", url: "********"},{label: "*******", url: "********"}];

**** 检查页脚链接 ****

**** 如果存在 footerLinks 我想分配给 const 页脚。 如果它们不存在,我需要终止该过程,这样我们就无法到达地图****

****如果存在footerLinks,则映射页脚以将名称更改为标签****

const shopLinks = footers.map((footer) => ( return {label: footer.name, url: footer.url } )

const allLinks = shopLinks.concat(mainLinks);

【问题讨论】:

    标签: javascript reactjs typescript


    【解决方案1】:

    如果不适合您的用例,为什么要坚持使用地图,请使用 forEace 而不是像下面这样...

    const { footers = [] } = state.data.item.footerLink;
    let dynamicLinkHolder = []
    const shopLinks = footers.forEach((footer) => (
     if(footer){
        dynamicLinkHolder.push({label: footer.name, url: footer.url })
      }
    )
    const allLinks = shopLinks.concat(dynamicLinkHolder);
    

    【讨论】:

    • 但是如果footerLinks 数据为空怎么办?然后 const 页脚 = 未定义。如果是这样,您将无法使用 map 或 forEach。你会得到一个错误。如果没有 footerLink 数据,我需要一个故障保险来仅返回 3 个静态链接。如果 footerLinks 中有数据,那么我需要映射或 forEach 并将键“名称”更改为“标签”。
    • const { 页脚 =[] } = state.data.item.footerLink;如果您喜欢上面的内容,您可以轻松跳过错误...
    猜你喜欢
    • 2019-11-03
    • 1970-01-01
    • 1970-01-01
    • 2017-04-24
    • 1970-01-01
    • 2014-02-22
    • 1970-01-01
    • 2013-10-21
    • 2022-11-10
    相关资源
    最近更新 更多