无法访问来自 JSON 的数据,接收标题未定义

Cannot access data from JSON receiving title is undefined

我正在尝试访问以下 JSON 数据:

我想访问 food_report 中的标题键,但是当我写 console.log(response.data.content.food_report.title) 我收到的标题未定义

知道哪里出了问题吗?任何帮助将不胜感激

我用过的完整代码是:

import React, {useEffect, useState} from 'react';
import {View, Text, StyleSheet, Platform} from 'react-native';
import Header from './components/Header.native';
import HeaderW from './components/Header.web';
import {timestamp, getFullDate} from '../../utils/dateUtils';
import {vc} from '../../api';
import {API} from '../../api';

export default function TodaysGoalScreen(props) {
  const {navigation} = props;
  const [data_web, getDataweb] = useState({});
  const [data_mob, getDataMob] = useState({});
  const [width, getWidth] = useState('');
  const SetWidth = () => {
    getWidth(window.screen.availWidth);
  };
  const getdataweb = async () => {
    try {
      const id = localStorage.getItem('user_id');
      const response = await API.get(
        `/nutrition/nutri-plan?child_id=${id}&event_date=${timestamp}&vc=${vc}`,
      );
      console.log('response', response.data.content);
      getDataweb(response.data.content);
    } catch (e) {
      console.log(e);
    }
  };
  const getdatanative = async () => {
    try {
      const id = props.route.params.id;
      const response = await API.get(
        `/nutrition/nutri-plan?child_id=${id}&event_date=${timestamp}&vc=${vc}`,
      );
      console.log('res', response.data.content);
      getDataMob(response.data.content);
    } catch (e) {
      console.log(e);
    }
  };
  useEffect(() => {
    if (Platform.OS == 'web') {
      getdataweb();
    } else {
      getdatanative();
    }
    SetWidth();
    setInterval(SetWidth, 1000);
  }, []);
  const web_data = data_web;
  const web_mob = data_mob;
  return (
    <View style={{backgroundColor: '#E5E5E5', flex: 1}}>
      {Platform.OS == 'web' ? (
        <View>
          <HeaderW data={data_web} />
          <View
            style={
              width > 414 ? styles.todaysgoalcardweb : styles.todaysgoalcardmob
            }>
            {data_web &&
              data_web != '' &&
              data_web != undefined &&
              data_web != null &&
              console.log('aaa', data_web.food_report.title)}
          </View>
        </View>
      ) : (
        <Header data={data_mob} />
      )}
    </View>
  );
}
const styles = StyleSheet.create({
  todaysgoalcardweb: {
    height: '393px',
    width: '600px',
    marginTop: '8px',
    alignSelf: 'center',
    backgroundColor: '#ffff',
    padding: 10,
  },
  todaysgoalcardmob: {
    alignSelf: 'center',
    width: '360px',
    height: '293px',
    backgroundColor: '#fff',
    marginTop: 10,
    padding: 10,
  },
  todaysgoaltitle: {},
});

添加了上面的代码以提供更好的清晰度希望它会有所帮助

问题

问题是您的初始 data_webdata_mob 状态是空对象

const [data_web, getDataweb] = useState({});
const [data_mob, getDataMob] = useState({});

但您尝试在初始渲染

上访问深度嵌套的 属性
{data_web &&               // <-- data_web defined so truthy value
  data_web != '' &&        // <-- data_web is object so true
  data_web != undefined && // <-- data_web defined so true
  data_web != null &&      // <-- data_web is object so again true
  console.log('aaa', data_web.food_report.title)} // <-- blow up because data_web.food_report is undefined

无法访问 title 属性 因为 data_web.food_report 未定义。

解决方案

如果可用,请使用可选链接

{console.log('aaa', data_web.food_report?.title)}

对每个可能未定义的嵌套级别使用常规空值检查

{data_web.food_report &&
  data_web.food_report.title &&
  console.log('aaa', data_web.food_report.title)
}