我有一个可以工作的应用程序,props 没有问题,除非我必须在将这些变量发送给子组件之前对它们进行过滤.以下是我的父组件:

import React, { useState, useEffect } from 'react';
import { useParams } from 'react-router-dom';
import ItemDetail from './ItemDetail';

const ItemDetailContainer = () => {
    const { itemId } = useParams();
    const [catData, setCatData] = useState([]);
    const [prodData, setProdData] = useState([]);

    const getData = () => {
        fetch('/data.json', {
            headers: {
                'Content-Type': 'application/json',
                Accept: 'application/json',
            },
        })
            .then(function (response) {
                return response.json();
            })
            .then(function (myJson) {
                setProdData(myJson['products'].find((c) => c.id == itemId));
                setCatData(myJson['categories'].find((c) => c.catId == prodData.catId));
            });
    };
    useEffect(() => {
        getData();
    }, []);

    if (prodData === null || catData === null || prodData === undefined || catData === undefined) {
        return null;
    }

    return <ItemDetail prodInfo={prodData} catInfo={catData} />;
};

export default ItemDetailContainer;

当我在ItemDetail中收到这些props 时,我得到一个空白对象:

Props as soon the page loads

但当我返回到我的代码并在ItemDetailContainer(父组件)上点击保存时,我从Childs的props 中获得了内容:

Props after I save the parent component

我try 使用带有和不带有依赖项、超时、间隔以及从函数返回的useEffect.我真的不知道还能try 什么.有什么线索吗?

顺便说一句,我只在控制台上展示了其中一个props .这就是为什么它们是一样的(我不知道为什么它们总是出现两次).

虽然这个问题看起来是重复的,但其他帖子/答案并没有用最近获得的数据进行计算,这是我所说的问题.

推荐答案

这可能对这件事有好处.

 .then(function (myJson) {
    const tmp_prodData = myJson['products'].find((c) => c.id == itemId)
    setProdData(tmp_prodData);
    setCatData(myJson['categories'].find((c) => c.catId == tmp_prodData.catId));
 });

...

useEffect(() => {
   ...
}, [prodData, catData])

Javascript相关问答推荐

有没有方法在Angular中的bowser选项卡之间移动HTML?

如何使用JavaScript对切换的声音设置音量

追踪执行顺序

脚本.js:3:20未捕获的类型错误:无法读取空的属性(读取addEventHandler)

主要内部的ExtJS多个子应用程序

materialized - activeIndex返回-1

通过使用100%间隔时间来代表我们还剩多少时间来倒计时

if/else JavaScript中的条件行为

浮动Div的淡出模糊效果

点击按钮一次有文本出现和褪色,而不是点击两次?(html,CSS,JavaScript)

将本机导航路由react 到导航栏中未列出的屏幕?

如何从调整大小/zoom 的SVG路径定义新的d属性?""

我在我的Java代码中遇到了问题,代码的一部分看不到先前定义的对象

让chart.js饼图中的一个切片变厚?

Nextjs 13.4 Next-Auth 4.2登录(&Quot;凭据&,{});不工作

在不删除代码的情况下禁用Java弹出功能WordPress

使用线性插值法旋转直线以查看鼠标会导致 skip

用于测试其方法和构造函数的导出/导入类

在SuperBase JS客户端中寻址JSON数据

Clip-Path在网页浏览器(Mozilla、Edge、Chrome)上不能正常工作,但在预览版Visual Code Studio HTML、CSS、JS上却能很好地工作