类型错误:未定义不是对象(评估“data.graphics.dvd”)

Posted

技术标签:

【中文标题】类型错误:未定义不是对象(评估“data.graphics.dvd”)【英文标题】:TypeError: undefined is not an object (evaluating 'data.graphics.dvd') 【发布时间】:2021-03-10 22:25:08 【问题描述】:

我正在玩 react-native 并从 API 获取一些数据。都好。当我试图将数据显示到我的然后我只能显示第一个喜欢 data.artistName,但是当我尝试访问 data.graphics.dvd 我收到错误“TypeError:未定义不是对象(评估'data.graphics .dvd')"

图形是一个对象。

const Videos = () => 
  const [isLoading, setLoading] = useState(true);
  const [data, setData] = useState([]);

  useEffect(() => 
    const fetchPost = async () => 
     fetch('https://myurl.com/api/title/5fac58f764e6710/')
      .then((response) => response.json())
      .then((json) => setData(json))
      .catch((error) => console.error(error))
      .finally(() => setLoading(false));
    
    fetchPost();
    
  , []);

    return (
  
 
    <View style=styles.wrapper>
     
    <Text style=styles.title>data.artistNamedata.graphics.dvd</Text>
      
    </View>
   )
  ;

【问题讨论】:

如果您收到该错误,那是因为图形为空,而您正试图获得空的“dvd”。您是否检查过数据是否包含“图形”? 是的,问题是如果应用程序重新加载并停留在该屏幕上,我会得到数据。但是当导航到该页面时,我不明白。 【参考方案1】:

在您的初始状态中,您将data 定义为一个空数组:

const [data, setData] = useState([]);

这意味着在第一次渲染时,data == [] 此时,当您访问data.artistName 时,其计算结果为undefined,但不会导致类型错误。

但是,当data === [],然后您尝试获取data.graphics.dvd 时,您会收到类型错误,因为graphics 未定义并且您尝试从中获取dvd

要解决此问题,请在渲染该部分之前检查 data 是否实际包含某些内容:

(data.artistName && data.graphics) ? <Text style=styles.title>data.artistNamedata.graphics.dvd</Text> : null

处理这个问题的另一种方法(在你进入 return 语句之前)是检查 data 并在没有任何内容的情况下执行不同的 return:

if (loading) 
  return <Text>Loading...</Text>


return (<View/>) //your normal return

这一切都基于data.graphics 存在,一旦您的 API 调用返回,原始帖子的评论者提到了这一点。

【讨论】:

感谢您的回复。现在我明白了!它无法加载它返回未定义的所有数据。我对吗?与您的解决方案相得益彰!谢谢。 时间线将如下所示:1) 初始渲染 2) useEffect 运行 3) fetchuseEffect 返回 4) 下一次渲染。因此,在第 4 步之前,您还没有任何数据。

以上是关于类型错误:未定义不是对象(评估“data.graphics.dvd”)的主要内容,如果未能解决你的问题,请参考以下文章

类型错误:未定义不是对象(评估“data.graphics.dvd”)

类型错误未定义不是对象(正在评估'Wu.getRandomValues')

错误:未定义不是对象(评估 \'RCTWebSocketManager.connect\')

TypeError:未定义不是一个对象(评估'_app.firebase.apps')

如何在本机反应中修复“TypeError:未定义不是对象(评估'_reactNativeCamera.default.constants')”错误?

EXPO:未捕获的错误:未定义不是对象(评估's.STANDARD_EVENT_ADD_TO_CART')