我正在使用axios從一個API獲取資料。 在我的發票詳情頁面上,當我嘗試使用此代碼只獲取一張發票的資料時
const id = props.match.params.id。
const invoice = useSelector((state) =>/span> state. invoices.find(invoice => invoice._id == id) )。)
它回傳一個物件或未定義,但我只想要一個陣列內的物件或一個空陣列而不是未定義,我應該怎么做? 當我試圖使用.filter方法而不是.find方法時,它將陣列記錄在控制臺中的時間是無限的。
完整的代碼:
import React, { useEffect, useState } from 'react'
import { Link } from 'react-router-dom'/span>
import backIcon from './assets/images/icon-arrow-left.svg'
import InvoiceDetailsHeader from ' ./InvoiceDetailsHeader' ;
import { useSelector } from 'react-redux';
//加入DB后洗掉這個。
import data from './data.json'
import InvoiceCardDetails from ' ./InvoiceCardDetails' ;
const InvoiceDetails = (props) => {
const [invoiceData, setInvoiceData] = useState([]);
const id = props.match.params.id;
const invoice = useSelector((state) =>/span> state. invoices.find(invoice => invoice._id ==id) )。)
useEffect(() => {
setInvoiceData(發票)。
// console.log(invoiceData)
}, [id, invoice])。
return (
<div className="mx-auto px-12 py-16 w-full max-w-3xl">
< Link to="/" className="text-neutral text-xs"/span>> < img className="inline -mt-1 mr-4" src={backIcon} alt="back" /> 回傳</鏈接>。
<InvoiceDetailsHeader data={invoiceData} />
<InvoiceCardDetails data={invoiceData} />
</div>/span>
)
}
export default InvoiceDetails
誰能幫我解決這個問題。
uj5u.com熱心網友回復:
useEffect(() =>/span> {
if(Invoice){
setInvoiceData([... invoiceData, invoice])
}
}, [id, invoice])。
uj5u.com熱心網友回復:
首先,我不知道我是否遺漏了什么,但我認為對于發票來說,物件和空陣列都有可能,這不是一個好方法。我認為更好的方法是劃分條件,在找不到ID的時候渲染發票。
如果使用過濾器方法而不是查找,過濾器方法每次都會回傳一個新的陣列實體。因此,隨著使用效果的第二個引數(發票)的變化,使用效果的更新回呼將繼續重復。
const invoice = useSelector((state) => /span> state. invoices.find(invoice => invoice._id == id) ? []);
你想要的東西可以簡單地使用Nullish coalescing operator來完成。
然而,[]也會創建一個新的陣列實體,所以更新回呼會無限期地重復。
因此,為了使你想要的東西在當前的代碼中發揮作用,請從useEffect的依賴中洗掉invoice,如下所示。
useEffect(() =>/span> {
setInvoiceData(發票)。
// console.log(invoiceData)
}, [id])。
uj5u.com熱心網友回復:
我認為這是因為你設定了setInvoiceData(invoice),它在一開始就沒有被定義,所以要對它進行檢查
。 if(invaloice){
setInvoiceData([發票])
}
請試試這個
uj5u.com熱心網友回復:為什么你首先要把undefined放到你的陣列中? 看起來,你把你從axios得到的任何東西加載到你的陣列中,然后試圖擺脫undefined。 你為什么不這樣做:檢查->如果它是一個物件->把它放入陣列,如果它不是,保持陣列不變? 或者我錯過了什么?
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/322733.html
標籤:
