亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

映射從 React 中的 nodejs 接收的數組時出現問題

映射從 React 中的 nodejs 接收的數組時出現問題

揚帆大魚 2022-08-04 17:18:57
我正在嘗試在 React 代碼中使用從 Node 返回的數組。以下是節點的路由器代碼:router.get('/prodlist', async (req, res) => {  try {    await Product.find({}).exec((err, result) => {      res.status(200).send({ express: result })    })  } catch (e) {    console.log(e)    res.status(400).send(e)  }})React 的組件代碼:import React, { useState, useEffect } from 'react';function App() {  const [datas, setDatas] = useState(null)  useEffect(() => {    var curURL = window.location.href    var calledRoute = curURL.substr(8).substr(curURL.substr(8).indexOf("/"))    callBackendAPI(calledRoute)      .then(res => setDatas(prevData => res.express))      .catch(err => console.log(err));  }, [])  async function callBackendAPI(routePath) {    const response = await fetch(routePath);    const body = await response.json();    if (response.status !== 200) {      throw Error(body.message)    }    console.log(body.express)    return body;  }  return (    <div className="App">      {{datas}}    </div>  )}export default App;以及數組內容(從Chrome的開發人員工具中看到):(3) [{…}, {…}, {…}]  0:    prodDesc: "Prod1"    prodID: "1"    prodImage: "prod1.jpg"    prodPrice: 350    prodRebate: 100    prodReviews: []    prodStock: 31    prodThumb: "prod1.jpg"    __v: 0    _id: "5eb04a6439eec26af4981541"    __proto__: Object  1: {prodID: "2", prodDesc: "Prod2", prodThumb: "prod2.jpg", prodImage: "prod2.jpg", prodPrice: 1500.79, …}  2: {prodID: "3", prodDesc: "Prod3", prodThumb: "prod3.jpg", prodImage: "prod3.jpg", prodPrice: 280.79, …}  length: 3  __proto__: Array(0)當我執行此代碼時,我收到錯誤:對象作為 React 子級無效因此,我嘗試用如下行來映射數據的內容:{datas.map((item) => <p>{item}</p>)}使用映射執行此代碼時,我收到錯誤:無法讀取 null 的屬性“map”。雖然數據包含一個數組,但 React 似乎將其視為 null。有人理解這個問題嗎?編輯:我沒有意識到這個問題是關于兩個不同的問題。Norbitrial的答案修復了有關同步性的問題,但我仍然收到錯誤“對象作為React子級無效[...]改用數組”。EDIT2:通過將映射轉發到具有以下行的 REACT 組件解決了該問題:{datas && datas.map(item => <ShopCart key={item.prodID} item={item} />)}
查看完整描述

3 回答

?
炎炎設計

TA貢獻1808條經驗 獲得超4個贊

問題是后端 API 以異步方式返回結果,因此在狀態值為 .null

解決方案可以先檢查值,然后使用代碼中調用的 on 狀態。null.map()datas&&

請嘗試以下操作:

{datas && datas.map((item) => <p>{item}</p>)}


查看完整回答
反對 回復 2022-08-04
?
斯蒂芬大帝

TA貢獻1827條經驗 獲得超8個贊

之前運行的代碼是從您的api填充的,您需要首先檢查以確保它像這樣填充。datas

{datas && datas.length && datas.map((item) => <p>{item}</p>)}


查看完整回答
反對 回復 2022-08-04
?
RISEBY

TA貢獻1856條經驗 獲得超5個贊

問題是,在接收數據之前,組件已裝入。

我會做的(和大多數人)是創建一個加載組件,當數組為空時,它將顯示一個微調器或類似的東西,并且在它被填滿后,它應該用數據呈現組件。

但對此的快速解決方案是進行條件渲染。

{datas.length && datas.map((item) => <p>{item}</p>)}


查看完整回答
反對 回復 2022-08-04
  • 3 回答
  • 0 關注
  • 158 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號