代码之家  ›  专栏  ›  技术社区  ›  CodeMonkey

无法访问React[重复]中的对象值

  •  -2
  • CodeMonkey  · 技术社区  · 2 年前

    我有一个功能反应组件,我想返回一个关于汽车的信息列表。返回语句的前三行(model、maker、release)加载时没有问题,但类别不会加载,因为React表示“category”未定义。

    当我控制台。记录汽车设置为状态后,汽车对象上有categories键,我可以将其展开以显示三个类别对象。然后,我可以展开其中的每一个以显示类别。id和类别。名称

    那么有没有办法接近这辆车呢。类别。类别名称问题是有三个对象吗?

    const CarDetails = () => {
        const {carsId} = useParams();
        const [car, setCar] = useState([])
    
        const loadCar = () => {
            getOneCar(carsId)
                .then(data => {
                    setCar(data)})
        }
    
        useEffect(() => {
            loadCar()
        }, []);
    
        useEffect(() => {
            console.log(car)
        }, [car])
    
    
        return (
            <>
            <h2>{car.model}</h2>
            <p>Maker: {car.maker}</p>
            <p>Year released: {car.released}</p>
            {/* <p>Categories: {car.categories.category.name}</p> */}
            </>
        )
    

    这就是对象的外观

    "model": Corvette
    "maker": Chevrolet
    "categories": [
                {
                    "id": 1,
                    "category": {
                        "id": 1,
                        "name": "Sports"
                    }
                },
                {
                    "id": 2,
                    "category": {
                        "id": 2,
                        "name": "Hybrid"
                    }
    
    3 回复  |  直到 2 年前
        1
  •  0
  •   Topfullstacker    2 年前

    我想是汽车。类别是数组而不是对象。 所以汽车。类别。类别不起作用。 请试试这辆车。类别[0]。类别,汽车。类别【1】。类别这样地。

    <>
      <h2>{car.model}</h2>
      <p>Maker: {car.maker}</p>
      <p>Year released: {car.released}</p>
      {/* <p>Categories: {car.categories.category.name}</p> */}
      <p>Categories: </p>
      {car && car.categories.map(item => {
        return(<span>{item.category.name}</span>)
      })}
    </>
    

    谢谢

        2
  •  0
  •   Son Nguyen    2 年前

    你的 car.categories 是数组,而不是对象。不能用点符号读取数组。相反,您必须循环访问每个元素,如下所示:

    <>
      <h2>{car.model}</h2>
      <p>Maker: {car.maker}</p>
      <p>Year released: {car.released}</p>
      <p>Categories: </p>
      <ul>
        {car.categories.map((category) => (
          <li>{category.name}</li>
        ))}
      </ul>
    </>
    
        3
  •  0
  •   Buddy Bob Youngkhaf    2 年前

    如果你看“类别”值,你会看到它是一个列表。所以你无法访问 category 通过这样做 categories.category .

    然而 category[0].category.name 可以根据需要为列表编制索引。

    或者您可以映射列表

    categories.map(item => item.category.name)