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

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

無法訪問函數外的對象屬性

無法訪問函數外的對象屬性

牧羊人nacy 2022-07-21 21:00:20
我是 React Js 或任何類型的 javascript 框架的新手。我在“onLoadServices”之外創建了一個“allServices”變量,在其中將數據傳遞給它,如下所示。問題是,當我在 de const onLoadService 中對其進行 console.log 時,它向我顯示了整個對象,我也可以訪問屬性,但在外部它只顯示了整個對象,但是當嘗試訪問屬性時它失敗了    let allServices = {  id: '',  client_id: '',  user_id: '',  status: "",  repair_value: "",  taxes: "",  service_code: "",  has_client_paid: "",  has_technician_paid: "",  plate: "",  brand: "",  model: "",  year: "",  color: "",  created_at: "",  updated_at: ""};const Dashboard = () => {  const classes = useStyles();  const [filters, setFilters] = useState({});  const [technicians, setTechnicians] = useState([]);  useEffect(() => {    onLoadSerivces();    onLoadTechnicians();  }, []);  useEffect(() => {  }, [filters]);  const onLoadSerivces = async () => {    try {      const { data } = await api.get(`/service`);      allServices = response.data.data      console.log("first log  ", allServices[0])    }    catch (err) {      let error = JSON.stringify(err.message);      alert(error);    }  };  console.log("Second log ", allServices[0])如果我嘗試在沒有 [0] 的情況下打印對象,它會在兩個 console.logs 中顯示相同的內容...問題出在屬性上。錯誤消息“TypeError:無法讀取未定義的屬性‘狀態’”我做錯了什么?
查看完整描述

1 回答

?
catspeake

TA貢獻1111條經驗 獲得超0個贊

你做的一切都是正確的。當您登錄“第二個 Console.log”時,該值尚未分配給您的變量,因為您將其設置在異步函數內部。如果您在代碼中的任何位置使用此變量,只需在訪問其中的屬性之前檢查它是否已設置。


Edit1:不確定是否是這種情況,以及您得到什么樣的響應,但也許嘗試將其轉換為 json,看看它是否有所作為。


const response = await api.get(`/service`);

const data = await response.json();

Edit2:我想我明白發生了什么:) 當您第二次登錄對象時,它尚未設置,因此當您嘗試訪問該值時 - 您會收到錯誤消息。您在登錄對象本身時看到它的原因是因為您打印了對該對象的引用,因此如果它在幾毫秒后被分配,它仍然會被打印。


如果您第二次在沒有參考的情況下打印它,很可能它仍然是空的,請嘗試: console.log("second Console.log ", Object.assign({}, allServices))


Edit3 要查看您是否正在設置值,請嘗試執行以下操作,看看您是否能夠使用它


const Dashboard = () => {

  const [allServices, setAllServices] = useState();


  useEffect(() => {

    onLoadSerivces();

  }, []);



  const onLoadSerivces = async () => {

    try {

      const { data } = await api.get('/service');

      const result = response.data.data;

      console.log('first log  ', result[0]);

      setAllServices(result);

    } catch (err) {

      const error = JSON.stringify(err.message);

      alert(error);

    }

  };



  // assume this will be an array

  render() {

    return allServices && allServices.map(service => {

      console.log('Second log ', service);

      return <div>{service.status}</div>;

    });

  }

};


查看完整回答
反對 回復 2022-07-21
  • 1 回答
  • 0 關注
  • 108 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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