当前位置: 首页 > 知识库问答 >
问题:

反应/盖茨比;无法读取null的属性“map”

阎承
2023-03-14
tools:
  - name: Hammer
    text: Use a wooden hammer
  - name: Glue
    text: PVA glue works best for this application
  - name: Paint
    text: Choose your favourite colour

我可以在我的post模板中映射,没有麻烦,比如我想获得每个工具的名称:

js prettyprint-override">{post.frontmatter.tools.map(item => (
  <span key={item.name}>{item.name}</span>
))}

我将这个数组传递给我的SEO组件,如下所示:

<SEO tools={post.frontmatter.tools} />

然后在我的SEO组件中,我可以访问那里的所有内容,这是我组件中的内脏,但map函数在这里不工作,我不知道为什么?

import React from "react"
import Helmet from "react-helmet"

const SEO = ({
  type,
  tools,
}) => {

  const seo = {
    type: type,
    howToTools: tools,
  }

  let schemaTools = seo.howToTools
  var schemaToolsWithType = schemaTools.map(function(item) {
    item.@type = "HowToTool"
    return item
  })

  console.log(newArray)

  const schemaType = seo.type

  let schemaHowTo = null

  if (schemaType === "howto") {
    schemaHowTo = {
      /* HowTo Schema */
      "@context": "http://schema.org",
      "@type": "HowTo",

      tool: schemaToolsWithType,

    }
  }

  let schemaArticle = null

  if (schemaType === "article") {
    schemaArticle = {
      {/* Article schema here */}
    }
  }

  return (
    <>
      <Helmet>
        {/* Insert schema.org data conditionally (HowTo/Article)*/}
        {schemaType === "howto" && (
          <script type="application/ld+json">
            {JSON.stringify(schemaHowTo)}
          </script>
        )}
        {schemaType === "article" && (
          <script type="application/ld+json">
            {JSON.stringify(schemaArticle)}
          </script>
        )}
      </Helmet>
    </>
  )
}

export default SEO
[
    {
      "@type": "HowToTool",
      "name": "Hammer",
      "text: "Use a wooden hammer"
    },
    {
      "@type": "HowToTool",
      "name": "Glue",
      "text: "PVA glue works best for this application"
    },
    {
      "@type": "HowToTool",
      "name": "Hammer",
      "text: "Choose your favourite colour"
    }
  ]
  let schemaHowToTools = []

  seo.howToTools.map(tool =>
    schemaHowToTools.push({
      "@type": "HowToTool",
      name: tool.name,
      text: tool.text,
    })
  )
  const schemaTools =
    seo.howToTools &&
    seo.howToTools.map &&
    seo.howToTools.map(tool => {
      const schemaTypeTool = {
        "@type": "HowToTool",
      }
      return Object.assign(schemaTypeTool, tool)
    })

共有1个答案

燕烨
2023-03-14

我建议使用安全导航来避免这样的错误。例如:

const result = tools && tools.map && tools.map(item => { return // etc })

只有当工具实际上是一个数组时,这才会在工具上映射。

甚至更好的是,您现在可以在JS中使用可选链接:

const result = tools?.map(item => { return // etc })
 类似资料:
  • 我有以下代码: 提交用户名和密码后:出现以下错误: 在以下行: 有什么问题?用户名不保存吗?(我用的是盖茨比)

  • 我在我的Gatsby应用程序中得到了这个错误,该应用程序为作者提取places数据。当author.social的map()点为null时,该错误将显示 谢谢

  • 问题内容: 您好,我正在尝试将React-Router与Firebase配合使用。但这给了我这个错误。 无法读取null的属性“ props” 这正是代码,我正在使用我的react-router 向下代码在组件上作为loginpanel组件。 我的react路由器在main.jsx上声明,我的react-router看起来像这样。 问题答案: 在回调中,指针不再指向您的React组件。有很多方法可

  • 我收到以下JavaScript错误: TypeError:无法读取null的属性“title” 代码如下: mds-iMac: cmscart imac$nodemo app[nodemo] 1.11.0[nodemo]随时重启,输入[nodemo]观看:.[nodemo]启动(node: 2274)DeprecationWarning:在猫鼬中被弃用 [nodemon]应用程序崩溃-正在等待文件

  • 问题内容: 除了添加新笔记,一切似乎都可以在这个小应用程序中使用。按钮位于Board组件上。 我知道这个问题通常是由于未正确绑定“ this”的值引起的。我不确定这是否是这里的问题,或者我是否缺少其他东西。谢谢 演示:http://jsbin.com/pewahi/edit?js,输出 问题答案: 您的代码很好。这可能是JSBin的错误,以及如何使用Babel处理转译。如果将杂项添加到代码的顶部,

  • 我知道有类似的线程讨论范围问题。 使用以下组件 当您单击时,您会得到的属性'setState' 我知道你可以像这样做,但所有这些看起来都很奇怪,只是为了让它工作。 什么被认为是最优雅的方式来做到这一点?当然,人们必须有一个首选的方式,除了眼睛疼痛之外,还有其他好处?