【发布时间】:2021-09-15 22:33:57
【问题描述】:
我是 React Native 的新手。我正在制作一个从 API 获取数据并将其显示在屏幕上的应用程序。呈现此屏幕时会出现以下错误: 渲染错误 undefined 不是对象(评估 'character.origin.name')
屏幕上的代码:
const CharacterDetailScreen = (props) => {
const { styles, colors } = useThemedValues(getStyles);
const loc = useLocalization();
**// state for character detail**
const [character, setCharacter] = useState([])
**// this id come from previous screen**
const { characterId } = props.route.params
useEffect(()=>{
Axios.get('character/'+characterId)
.then(response =>{
characterDetail = response.data
setCharacter(characterDetail)
console.log(characterDetail.name) // if characterId=89, writes "dale" in console
})
.catch(error => {
console.log(error)
})
},[])
return (
<View style={styles.container}>
<View style={styles.imageContainer}>
<Image source={{ uri: character.image }}
style={styles.image}
/>
</View>
<View style={styles.characterNameContainer}>
<Text style={styles.characterName}>{character.name}</Text>
</View>
<View style={styles.detailContainer}>
<Text style={styles.detailText} >{loc.t(texts.status)}{character.status}</Text>
<Text style={styles.detailText} >{loc.t(texts.species)}{character.species}</Text>
<Text style={styles.detailText} >{loc.t(texts.gender)}{character.gender}</Text>
<Text style={styles.detailText} >{loc.t(texts.type)}{character.type}</Text>
<Text style={styles.detailText} >{loc.t(texts.origin)}{character.origin.name}</Text>
<Text style={styles.detailText} >{loc.t(texts.location)}{character.location.name}</Text>
</View>
</View>
);
};
export default CharacterDetailScreen;
我检查了来自 API 的传入数据。是不是因为页面渲染的时候数据还没有从api来?
这里是来自 API 的传入数据示例:
const character = {
"created": "2017-12-01T10:32:08.340Z",
"episode": ["https://rickandmortyapi.com/api/episode/5"],
"gender": "Male",
"id": 89,
"image": "https://rickandmortyapi.com/api/character/avatar/89.jpeg",
"location": {"name": "Giant's Town", "url": "https://rickandmortyapi.com/api/location/14"},
"name": "Dale",
"origin": {"name": "Giant's Town", "url": "https://rickandmortyapi.com/api/location/14"},
"species": "Mythological Creature",
"status": "Dead",
"type": "Giant",
"url": "https://rickandmortyapi.com/api/character/89"
}
【问题讨论】:
-
API 网址:rickandmortyapi.com/api
-
这是因为 setCharacter(characterDetail) 是异步过程,将数据设置为状态需要时间。您面临的错误是因为“字符”状态为空。
-
你应该在角色有一些数据时加载视图。添加逻辑以仅在数据可用字符时显示视图。
标签: javascript react-native api axios react-flatlist