【发布时间】:2020-12-10 16:56:42
【问题描述】:
首先,我有 useEffect(),它从 API 获取数据并将其传递给名为 companyData 的 React State
API 响应如下所示:
{
"data": [
{
"date1": {
"BalanceSheet": {
... {JSON DATA}
},
"CashFlow": {
... {JSON DATA}
},
"IncomeSheet": {
... {JSON DATA
}
]
}
我的 useEffect 和 State 看起来像 ..
const [companyData,setCompanyData] = useState({});
useEffect(()=>{
axios.get(`/api/company/view/${id}`).then((res)=>{
setCompanyData(res.data[0])
})
},[])
所以当我尝试访问companyData.date1.CashFlow(在 useEffect 之外)
点赞 console.log(companyData.date1.CashFlow)
它返回TypeError: companyData.date1 is undefined
但如果我尝试控制台记录 companyData 或 companyData.date1
它返回 JSON 没有任何错误
我的 React 组件代码:
export default function YourAnalysis(props){
const [companyData,setCompanyData] = useState({});
const [tableToShow,setTableToShow] =
useState({incomesheet:false,balancesheet:false,cashflow:true});
const id = props.match.params.id
useEffect(()=>{
axios.get(`/api/company/view/${id}`).then((res)=>{
setCompanyData(res.data[0])
}).catch(err=>{
console.log('an error')
})
},[])
function renderTable(){
if(tableToShow.incomesheet){
return (<div></div>)
}
if(tableToShow.balancesheet){
return (<div></div>)
}
if(tableToShow.cashflow){
console.log(companyData) // works fine
console.log(companyData.date1.CashFlow) // date1 is undefined
}
}
我认为这是因为 API 响应异步并且需要时间来分配\设置数据到 companyData 状态,
奇怪的是我可以访问和记录companyData 或companyData.date1 我会看到 JSON 数据,一切都很好
但是当我尝试访问 companyData.date1.CashFlow 或 companyData.date1.BalanceSheet 或 companyData.date1.IncomeSheet它返回 undefined
可能是因为date1的名字?
或者react有处理嵌套json对象的方法?
有什么帮助吗?我是反应新手
【问题讨论】:
-
显示出现错误的代码。你在哪里有 console.log
-
好的,我会做的,等一下
-
然后检查长度?
if(Object.keys(companyData).length !== 0) -
@EmileBergeron 是的,我已经检查了this question,这是我真正想要的!非常感谢
-
@EmileBergeron 当你说:难道不是
res.data.data[0]你在这一点上是对的,但是我在我的问题中显示的 API 响应是 axios 响应,但我删除了对象除了data对象
标签: javascript reactjs