【问题标题】:ReactJS: Cannot read property 'raw' of undefinedReactJS:无法读取未定义的属性“原始”
【发布时间】:2019-12-07 14:48:27
【问题描述】:

我正在开发一个使用 swiftype reackJS 演示应用程序作为起点的搜索引擎。它正在使用 search-ui npm。

我得到:无法读取未定义的属性“原始”

   export default ({ result }) => (
        <img
          id="offre_logo_3"
          alt=""
          style={{
            position: "relative",
            zIndex: 1002,
            display: "block",
            top: "88px",
            margin: "0 auto",
            height: "30px",
            width: "30px"
          }}
          src={"https://www.cliiic.com/images/" + result.icone.raw}
        />
   );

result.icone.raw 是根据我在 App.js 文件中的理解正确设置的,如下所示:

result_fields: {
  id: { raw: {} },
  couleur: { raw: {} },
  icone: { raw: {} },
  notice: { raw: {} },
  short_title: {
    snippet: {
      size: 50,
      fallback: true
    }
  },
  name: {
    snippet: {
      size: 50,
      fallback: true
    }
  },
  city: { raw: {} },
  region: { raw: {} },
  zip: { raw: {} },
  type: { raw: {} },
  accepted_clic: { raw: {} },
  alltxt: { raw: {} },
  price: { raw: {} },
  quantity: { raw: {} },
  start_date: { raw: {} },
  end_date: { raw: {} },
  newmembersonly: { raw: {} },
  main_category: { raw: {} },
  secondary_category: { raw: {} }
}

测试应用发布在这里https://5kyd5.csb.app/offre.php?q=test&size=n_20_n (由于错误加载一个空白页面。打开控制台查看发生了什么)

源代码可以在这里找到:https://codesandbox.io/s/video-games-tutorial-with-images-5kyd5

我可以在 swiftype 模式表中看到 icone col,并且它已按预期填充。

任何帮助将不胜感激。

我在控制台中发布了结果对象,我尝试访问对象值的方式似乎一切正常。

这是指向 API 返回的 JSON 对象的链接 https://jsonblob.com/d081e6ed-186c-11ea-a766-135bd1c509b2

================= 编辑:

我想我可能发现了问题...通过查看 API 返回的 JSON,我注意到 icone var 不在第一个结果中!

https://jsonblob.com/d081e6ed-186c-11ea-a766-135bd1c509b2

这意味着该产品已被恶意删除,并且未与弹性搜索系统同步。如果 var 不存在,有没有办法避免空白页面?

【问题讨论】:

  • 您是否尝试过记录result 以查看它具有哪些属性?
  • 这是个好建议。我会怎么做?
  • console.log(result) 在代码中定义 result 的位置。
  • 完成,请查看测试应用
  • 我贴了源代码的链接

标签: reactjs swiftype


【解决方案1】:

这是一个工作沙箱的链接https://codesandbox.io/s/video-games-tutorial-with-images-6zh7i

如果您希望所有内容都同步,您可以在返回之前创建 const 字段,如果这些键是 undefined,则会为其分配一个空对象

例如const {icone} = result || {}

如果您愿意,您可以对所有键执行此操作。

【讨论】:

  • 我在控制台中发布了结果,一切正常。这是正确使用的 var。
  • 是的,我也通过开发工具验证了它
  • 你能告诉我如果你把它从 src 中完全删除它是否有效吗?
  • 是的,如果我删除它,它会起作用。我的其他变量似乎打印正常,没有任何错误。 (name, short_title, id, price) 等...只有 icone 和 couleur 似乎是问题所在。 (我最近添加到 swiftype 的最后 2 个)
  • 查看我的解决方案,即使在搜索后也能完美运行。
【解决方案2】:

您正在设置result_fields 对象但调用result 对象。尝试将您的对象重命名为相同的名称,看看您是否仍然遇到问题!

编辑:您似乎正在调用一些脚本/api/carrier-pigeon 来填充result 对象。但是,当您调用要导出的元素时,该对​​象可能还不存在。尝试将您的导出修改为以下内容,您应该会明白我在说什么:

export default ({ result }) => {
console.log('And the results are in!', result);
return (
        <img
          id="offre_logo_3"
          alt=""
          style={{
            position: "relative",
            zIndex: 1002,
            display: "block",
            top: "88px",
            margin: "0 auto",
            height: "30px",
            width: "30px"
          }}
          src={"https://www.cliiic.com/images/" + result.icone.raw}
        />
   )};

【讨论】:

  • 实际上使用结果效果很好......我已经使用了一些值来显示 ID、价格和名称。循环的标题看起来像这样export default ({ result }) =&gt; (
  • 我不确定您在说什么,因为这不是您帖子中任何摘录的一部分。我只能告诉你的是,你的意思是你的 App.js 最初使用 result_fields: {...} 对象设置了该值,但你的 img 元素正在调用 result 对象。
  • 我在控制台中发布了结果,一切正常。这是正确使用的 var。
  • 我更新了我的答案,希望能更清楚地了解我认为的问题所在。
  • 我按照您的要求做了,并在开发工具中正确查看了对象。请打开测试应用程序并亲自查看。感谢您的帮助!
猜你喜欢
  • 2020-05-15
  • 1970-01-01
  • 2016-08-08
  • 2018-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-06
  • 2021-12-06
相关资源
最近更新 更多