reactjs - React 不等待获取数据[编辑]
问题描述
我给了条件以if
等待useEffect()
获取数据..
invoice && invoice['data']
像这样。
我的期望是setMoney()
会奏效。但它只是通过了这个函数。
invoice
从存储中获取数据。
这是视图组件。
import React, {useContext, useEffect, useState} from 'react';
import './invoice.scss';
import InvoiceFilter from './invoice_filter';
import InvoiceTable from './invoice_table';
import {invoiceContext} from '@/context/invoice_dataStore';
function Invoice(props) {
const {invoice, getInvoiceInitialData} = useContext(invoiceContext);
const [receivable, setReceivable] = useState(0);
const [pending, setPending] = useState(0);
useEffect(() => {
if (invoice && invoice['data']) {
setMoney();
}
}, []);
function setMoney() {
if (invoice && invoice['data']) {
const infoSt = invoice['data'].map((info) => info);
infoSt.forEach((info) => {
switch (info.status) {
case 100: //receivable
setReceivable((prev) => prev + info.amount);
break;
case 200: // Pending
setPending((prev) => prev + info.amount);
break;
default:
throw new Error('unknown command');
}
});
}
}
return (
<React.Fragment>
<div className="invoice">
<strong>${receivable}</strong>
<strong>$ {pending}</strong>
</div>
</React.Fragment>
);
}
export default Invoice;
在使用之前进行了编辑useEffect()
,我只使用了if
.
我仍然不明白为什么这不起作用。!
if(invoice && invoice['data']){
setMoney();
}
因为这行得通。
let showTable;
if(invoice && invoice['data']){
showTable = invoice['data'].map((info) =>
<div>{info.title}</div>)
}
}
return (
<>
{showTable}
</>
)
解决方案
useEffect
仅在初始组件挂载后调用具有空依赖项数组。您的上下文中的数据很可能invoice
在执行时未填充useEffect
。
要解决此问题,您必须将依赖项invoice
作为依赖项传递给useEffect
钩子,以便您的函数可以在其值更改时执行。
useEffect(() => {
if (invoice && invoice['data']) {
setMoney();
}
}, [invoice]);
推荐阅读
- facebook - 如何使用 instagram 作为聊天机器人,我已经使用 facebook messenger
- soap - SOAP 请求 XML 元素顺序 (node-soap)
- php - Laravel 8.53 - 路由不适用于任何页面
- reporting-services - Power Bi 报表生成器 - 计算去年的变化
- python - 如何使用python根据同一数据框中另一列的值对数据框中的列中的值进行排序
- azure-devops - 具有动态环境的 Azure Pipeline 部署作业
- python - 制作 Spotify 语音助手时出错
- apache-kafka - Apache 点燃集群复制到另一个集群
- visual-studio-code - VSCode 删除了我的项目所在的文件夹
- java - 如何通过邮递员发送 MultiPartFile 列表列表