reactjs - 打字稿中的对象可能是“未定义”
问题描述
所以这是我的组件:我正在从一个 mockAPI 发出 GET 请求,它是这样的结构:
"usuarios": [
{
"nome": "foo bar",
"cpf": "213.123.123-45",
"email": "foo_bar@email.com",
"endereco": {
"cep": 13454000,
"rua": "rua talvez",
"numero": 785,
"bairro": "bairro azul",
"cidade": "cidade eterna"
},
"id": 1
},
等等。
当我记录 response.data 时它工作正常,当我记录状态时它工作正常,但是当我尝试记录 userList 状态数组中的对象时,我得到“对象可能未定义”。
const UserList: React.FC = () => {
const endpoint = "http://localhost:5000/usuarios";
const [userList, setUserList] = useState();
const getApi = () => {
axios
.get(endpoint)
.then((response) => {
console.log(response);
setUserList(response.data);
})
.catch((error) => console.log(error));
};
useEffect(() => {
getApi();
}, []);
return (
<div>
<button onClick={() => console.log(userList[0])}>SEE THE API</button>
[...]
我环顾四周,看到有人说我应该更改 ts.config 对这些事情的严格程度,但有人建议我不要这样做。我似乎无法访问数组内对象的值。
解决方案
问题是您声明:
const [userList, setUserList] = useState();
userList
的默认值为undefined
。因此访问userList[0]
可能会引发运行时错误。
修复它的两种方法:
const [userList, setUserList] = useState([]);
默认为空数组。onClick={() => console.log(userList?.[0])}
可选的链接运算符,以防止运行时错误。
推荐阅读
- parallel-processing - MPI:如何确保子程序仅在默认节点的一个处理器上执行?
- angular - Angular从子类向基类模板添加项目?
- vim - vim自动加载文件夹权限被拒绝?
- javascript - 为什么我的页面可以获取 Vue.js 2 数据属性但它不是响应式的?
- assembly - 在 ARM7 处理器的汇编程序中跳转到特定点/具有特定偏移量
- mongodb - 如何更新 MongoDB 集合中的字段,使其线性递增
- authentication - 如何信任应用程序使用我的访问令牌?
- php - 如果数组为空,如何从php中的关联数组中删除数组
- java - 为什么在使用 Material 按钮时我的应用程序会崩溃?
- ios - 当 ObservedObject 更改时,在 SwiftUI 视图中未调用 onReceive