javascript - 打开 DrawerNavigation 时自动调用 API
问题描述
我正在使用 useEffect 使用此 API 中的数据。仅在您第一次打开组件时才有效。
我想要的是,每次 API 中的数据发生变化。更改组件信息。
当我使用 useIsFocused 或 useFocusEffect 时,我收到错误:找不到导航对象。是导航器屏幕内的组件。
const [infoUser, setInfoUser] = useState([]);
const getNameUser = async () => {
try {
const accessToken = await AsyncStorage.getItem('@access_token');
/* console.log('Token', accessToken); */
axios
.get(
'https://exampleapi/api/cliente',
{
headers: { Authorization: `Bearer ${accessToken}` },
},
)
.then(function (response) {
// handle success
console.log('DADOS USER:', response.data.data.nomeCompleto);
const userData = response.data.data;
setInfoUser([userData]);
})
.catch(function (error) {
// handle error
console.log(error);
});
} catch (e) {
// error reading value
console.log('Erro de token', e);
}
};
useEffect(() => {
getNameUser();
}, []);
解决方案
通过像这样传递空数组来使用 useEffect 钩子:
useEffect(() => {
getNameUser();
}, []);
给它一个空数组就像 componentDidMount 一样,它只运行一次。
不给它第二个参数同时充当 componentDidMount 和 componentDidUpdate,因为它首先在挂载时运行,然后在每次重新渲染时运行,例如:
useEffect(() => {
getNameUser();
});
推荐阅读
- php - sweetalert2 处理 json 答案
- node.js - 没有 HTTP 的 NestJS UDP 服务器
- office365api - 我可以将 okta 令牌用于 Microsoft Graph 日历事件导入 api 吗?
- here-api - 签名不匹配。授权签名或客户端凭证错误
- c# - Clean Asp.Net Core 3 项目无法启动;System.ComponentModel.Win32Exception (5):访问被拒绝
- python - 如何使用 Requests Python 模块对代理进行身份验证?
- dynamoose - 如何 OR 查询 Dynamoose 中的包含项?
- next.js - Next.js 多语言网站的 url 结构
- laravel - 如何使用 Laravel、Cashier 和 Vue js 添加 Stripe 支付?
- javascript - 错误:对象作为反应子无效