如何在反应钩子中按系列显示图表

问题描述

index.tsx

    const [ data,setData ] = useState({});
    const [ dataChart,setDataChart] = useState({});
    const [ isLoading,setIsLoading ] = useState(false);
 const fetchChartDetail = useCallback(async (data?) => {
        if (data && Object.keys(data).length > 0 && data['data'].length > 0) {
            data['data'].map(async (res) => {
                try {
                    await getAll({start: 1,length: 45,sensor: data.sensor}).then((response) => {
                        let DATA = {
                            ...response,id: res['id'],sensor: res['sensor'],chart: [{
                                ...configChart,data: response && response['data'] ? response['data']['data'] : []
                            }]
                        }

                        if (res.spinning) {
                            res['spinning'] = false;
                        }
                        const data = {...res,data: response && response['data'] ? response['data']['data'] : []
                            }]};

                            if (!res.spinning) setDataChart(DATA);
                    });
                } catch (err) {
                    setError(err);
                }
            })
        }
    },[])
    const fetchData = useCallback(async (params?,status?) => {
        try {
            await getLatest().then((response) => {
                let DATA = response['data']['data'];
                DATA = Object.values(DATA.map((obj) => {
                    return {
                        ...obj,spinning: true,}
                }));

                response['data']['data'] = DATA;
                
                if (!status) {
                    setData(response['data']);
                    setIsLoading(false);
                    fetchChartDetail(response['data']);
                }
            })
        }catch(err) {
            setError(err)
        }
    },[])

    useEffect(() => {
        let ignore = false;
        setIsLoading(true)
        const timeout = setTimeout(() => {
            fetchData(null,ignore);
        });
        return () => {
            ignore = true;
            clearTimeout(timeout);
        };
    },[fetchData]);

return (
        <>
            {
                isLoading ? (<Loading src={`/images/icons/gif/loader.gif`} imgStyle={imgStyle} />) :
                <div className="md:flex content-center flex-wrap -mx-2 p-3">
                    {
                        data && Object.keys(data).length > 0 && data['data'].length > 0 ? 
                        (
                            data && data['data'].map((item,idx) => (
                                <div key={idx} className="md:flex md:w-1/2 lg:w-1/2 xl:w-1/3 px-2 py-2">
                                    <div className="md:flex-1 p-4 rounded shadow-lg bg-white border-b border-r border-grey-dark" onClick={() => routeDetail(router,item)}>
                                       <div className="flex flex-col">
                                            <Room config={{ item: item,...configRoom }} index={idx} />
                                       </div>
                                       <div>
                                            <Echart config={dataChart && dataChart['chart'] ? dataChart['chart'] : [configChart]} loading={item.spinning} colors={colors} dataZoom={true} />
                                       </div>
                                    </div>
                                </div>
                            ))
                        ) : ('NO DATA')
                    }
                </div>
            }
        </>
    );

在这里要做的是按系列显示折线图,或者如果数据已经完成,那么它将显示数据。但我的问题是例如我有 3 个图表然后在从图表 1 中获取一个所有数据后它将显示然后下一个获取数据是图表 2 但它会在图表 2 上显示数据图表 2 它将显示图表的数据聊天2中的1,则图表1的数据为空。

在控制台上,当它控制台 dataChart 第一次加载

{ data: [...],name: 'chart1'}
{ data: [],name: 'chart2'}
{ data: [],name: 'chart3'}

二次加载

{ data: [],name: 'chart1'}
{ data: [...],name: 'chart3'}

第三次加载

{ data: [],name: 'chart2'}
{ data: [...],name: 'chart3'}

它应该是这样的:

第一次加载

{ data: [...],name: 'chart1'}

二次加载

{ data: [...],name: 'chart2'}

第三次加载

{ data: [...],name: 'chart3'}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...