4 回答

TA貢獻1812條經驗 獲得超5個贊
發生這種情況是因為頁面打開時購物車內容不會立即從電子商務 API 加載,然后由于錯誤而卡住了。
你可以先檢查是否有購物車內容,然后刪除 isEmpty 變量,然后在 javascript 閉包中編寫,在幾秒鐘后的視頻中解釋,但經過一天的掙扎,我也意識到了:D
if(!cart.line_items)
return '...loading';
return (
<div className={classes.toolbar}>
<Typography className={classes.title} variant="h3"> Your Shopping Cart
</Typography>
{!cart.line_items.length ? <EmptyCart /> : <FilledCart />}
</div>
)

TA貢獻1816條經驗 獲得超4個贊
嘗試 const isEmpty = Object.keys(cart).length && !cart.line_items.length;
未從服務器接收數據,但組件已呈現,這就是為什么卡一開始是未定義的。

TA貢獻1859條經驗 獲得超6個贊
嘗試使用可選鏈:
const isEmpty = !cart.line_items?.length
僅當數組存在時才會詢問數組長度,從而防止出現未定義的錯誤。這意味著它將返回 false ifcart.line_items == undefined
或 if cart.line_items.length == 0
。
也許我參加聚會有點晚了,但我陷入了同一個部分,這解決了我的問題(而且我認為它看起來很整潔)

TA貢獻1840條經驗 獲得超5個贊
問題 初始渲染上沒有 cart.line_items,因為初始狀態是空對象 ({})。
const [cart, setCart] = useState({});
解決方案 為初始渲染提供有效的初始狀態,以便有一個真實的、已定義的 cart.line_items 對象,其中具有 length 屬性,即!cart.line_items.length; 可以解析為一個值并且不會拋出錯誤。
const [cart, setCart] = useState({ line_items: [] });
添加回答
舉報