【问题标题】:Javascript saying object value is undefined. What am I doing wrong?Javascript 说对象值未定义。我究竟做错了什么?
【发布时间】:2019-12-22 09:30:14
【问题描述】:

我试图在我的 React 应用程序的 Github 存储库数组(从解析的 JSON 中检索)中显示对象的值,但是我收到一个错误,即浏览器无法读取属性 @ 987654321@ 未定义。

我可以 console.log 记录 JSON 数据和其中的对象,但如果我尝试记录这些对象中的值,我会收到错误消息。

const App = () => {
const [repoList, setRepoList] = useState({});

useEffect(() => {
    fetch("https://example.com/api")
        .then(res => res.json())
        .then(data => setRepoList(data));
});

return (
    <div>{repoList[0].id}</div>
)

}

如果我将JSON.stringify(repoList) 放在 div 元素中,它会显示数据。

如果我将JSON.stringify(repoList[0]) 放在 div 元素中,它也会显示数据。

但如果我输入类似repoList[0].id 的内容,则不会出现任何内容。列出的每个键都会发生这种情况。我可以确认钥匙在那里。我做错了什么?

【问题讨论】:

  • 试试这个 - &lt;div&gt;{repoList &amp;&amp; repoList[0].id}&lt;/div&gt;
  • @ravibagul91 这行不通,他已经用一个空对象实例化了repoList
  • 试过了,但对我不起作用

标签: javascript reactjs api fetch


【解决方案1】:

您正在调用异步函数来填充 repo 列表。返回第一次尝试使用repoList[0].id,没有repoList[0]。当您使用useState({}) 设置它时,您可能希望将 repoList 初始化为一个非错误的虚拟对象

【讨论】:

  • 我明白了,谢谢。我在下面尝试了 Morlo 的建议,我相信它考虑到了这一点,它对我有用。谢谢
【解决方案2】:

试试这个。

const [repoList, setRepoList] = useState([]); // Change to array not object.

...

return repoList.length ?
  (<React.Fragment>{repoList[0].id}</React.Fragment>) 
  : (<span>Loading ....</span>)

如果你的div 没有样式,更好的用户Fragment,它会带来更好的性能。

【讨论】:

  • 这是为我做的!谢谢
  • 您并不总是希望将片段用于没有样式的东西......这是一种误导性的陈述。 &lt;React.Fragment&gt;Loading ....&lt;/React.Fragment&gt; 我认为在 html 中包含随机字符串比在文本周围放置 span 更令人困惑和破坏 HTML 语义。
  • @JohnRuddell,我同意,这更多的是回答问题。
猜你喜欢
  • 2013-02-25
  • 2013-08-06
  • 1970-01-01
  • 2015-08-26
  • 1970-01-01
  • 2016-07-18
  • 1970-01-01
  • 2014-09-13
  • 2019-12-23
相关资源
最近更新 更多