我正在使用useEffect
来获取数组数据,然后显示项目。当我获取数据时,我可以看到数据已成功获取。
但是,当我尝试在view
中显示数据时,它给我一个错误Cannot read property 'name' of undefined
我认为view
在获取之前正在渲染。但是我使用async await
确保首先调用useEffect
。
是否知道如何在view
中显示数据?
任何意见或建议将非常有帮助。提前致谢 :)
const FetchUsers = () => {
const [data, setData] = useState([])
const [loading, setLoading] = useState([])
const URL = "myurl..."
useEffect(() => {
async function fetchData() {
const res = await axios.get(URL, {headers: {"x-access-token":memberToken}});
const response = await res;
console.log(response.data.data,'data')
//when I console log
// [{…}, {…}] "data"
//0: { name: "kevin", age: 39}
//1: { name: "john", age: 23}
console.log(response.data.data[0].title, 'name')
setData(response.data.data);
setLoading(false);
}
fetchData()
}, [])
return(
<View>
//I am trying to display fetched data
<Text>{data[0].name}</Text>
</View>
)
}
最佳答案
没有“被称为第一”。您的组件立即渲染,useEffect
包含“副作用”-在组件渲染后的某个未知点发生的事情。
因此,data
将在将来的某个时间设置,因此您必须先检查它是否可用,如果不可用,然后在其位置进行渲染,例如:
return(
<View>
<Text>{!data.length ? 'Loading...' : data[0].name}</Text>
</View>
)