我有一个表在我的数据库中,冷诗人在我的表字段可以命名,所以我尝试从数据库中获取名称,但是当我运行应用程序时,这个消息会出现。
未定义的不是一个对象(计算abc.name)
在我的代码下面
import React from 'react';
import {useEffect} from 'react';
import {useState} from 'react';
import { useRoute } from '@react-navigation/native';
import { DataStore } from 'aws-amplify';
import { Apoet } from '../../models';
const ProductScreen = () => {
const route = useRoute();
console.log(route);
const {abc, setABC}= useState<Apoet | undefined>(undefined);
useEffect (()=>{
if(!route.params?.id){
return ;
}
DataStore.query(Apoet,route.params.id).then(setABC)
},[route.params?.id]);
return (
<View>
<Text>{abc.name} </Text>
</View>
)}
发布于 2022-05-05 13:03:42
您的useState
是错误的,请用方括号修改。还要确保route
如您所期望的那样更改,否则它将再次是undefined
,因为您的初始状态值也是undefined
。
const [abc, setABC] = useState<Apoet | undefined>(undefined);
发布于 2022-05-05 13:06:30
问题
您从useState
钩子中错误地访问了返回值,它返回一个数组,而不是一个对象。
const {abc, setABC} = useState<Apoet | undefined>(undefined);
您还使用未定义的初始值,因此试图访问它将引发错误。
解决方案
修正返回和使用数组,销毁赋值,并使用一个有效的初始值。
const [abc, setABC] = useState<Apoet>({});
...
<Text>{abc.name}</Text>
现在已经定义了abc
,并且可以访问未定义的name
属性,使用状态更新。
或者,如果希望将其保留为未定义,请在name
属性访问上使用null检查或可选链接运算符。
示例:
const [abc, setABC] = useState<Apoet | undefined>();
...
<Text>{abc && abc.name}</Text>
or
<Text>{abc?.name}</Text>
https://stackoverflow.com/questions/72133505
复制