javascript ReactJS -尝试访问我从在线网页上拉取的对象的标题,但得到这些错误

vsnjm48y  于 2023-03-11  发布在  Java
关注(0)|答案(2)|浏览(91)

我尝试用ReactJS创建一个新闻网站,当我尝试运行页面时,我收到三个不同的警告/错误。当我不包含标题时,我可以让它正确显示文章链接。在这种情况下,我仍然收到前两个警告,但当我尝试访问文章标题时,它根本不会加载页面。
任何帮助都将不胜感激。
警告/错误:

警告:列表中的每个子项都应该有唯一的“键”属性。
警告:标记上属性href的值无效。
未捕获的错误:对象作为React子级无效(找到:键为{render}的对象)。如果要呈现子级集合,请改用数组。

LatestArticles.js

import React, { useState, useEffect } from "react";
import Article from "./Article";

function LatestArticles() {
  const [posts, setPosts] = useState(React.useState("waiting..."));

  function ArticleGrabber() {
    useEffect(() => {
      fetch("URL")
        .then((response) => response.json())
        .then((data) => {
          setPosts(data);
          console.log(data);
        })
        .catch((error) =>
          console.log("Authorization failed: " + error.message)
        );
    }, []);
  }

  ArticleGrabber();

  return (
    <div>
      <h3>Latest Articles</h3>
      {posts.map((post, index) => (
        <ul>
          <Article key={index} post={post} />
        </ul>
      ))}
    </div>
  );
}

export default LatestArticles;

Article.js

import React from "react";
import "../Article.css";

function Article(post) {
  return (
    <div className="theArticle">
      <h3>{post.post.title.rendered}</h3>
      <a href={post.post.link}>Article content</a>
    </div>
  );
}

export default Article;
rt4zxlrg

rt4zxlrg1#

警告:列表中的每个子元素都应该有唯一的“键”属性。

*添加keys时,您需要将其添加到项目的父元素(在本例中为ul标记)。

警告:标记上prop href的值无效。
未捕获的错误:对象作为React子级无效(找到:如果要呈现子对象的集合,请改用数组。

对于这两个错误,可能是由于您获取数据的方式,但我首先要研究几件事:

1.您正在React钩子中使用react钩子(useStateReact.useState),而不是将默认值设为空array

const [posts, setPosts] = useState([]));

1.把你的useEffect从你的函数中去掉,因为它只在有副作用的时候运行......我会完全删除你的函数,只坚持通过useEffect渲染你的帖子,这应该会起作用。

nfg76nw0

nfg76nw02#

据我所知,我看到了两个问题。1.内部状态和UseEffect钩子。试试这个:

const [waiting, setWaiting] = useState("waiting...")
 const [posts, setPosts] = useState([]));

    useEffect(() => {
     const articleGrabber = () => {
             fetch("URL")
        .then((response) => response.json())
        .then((data) => {
          setPosts(data);
          console.log(data);
        })
        .catch((error) =>
          console.log("Authorization failed: " + error.message)
        );
     }
    articleGrabber() 
    }, []);

相关问题