javascript - 通过表单为用户更新配置文件
问题描述
我正在尝试构建一个更新配置文件表单,用户可以在其中更改他的详细信息,并且 onSubmit 新数据将被发送到PUT/users
端点以更新数据库中的详细信息。表单将预先填写旧值(通过GET
对同一/users
端点的请求获得)。要访问此端点,我们还需要发送带有电子邮件和密码的基本身份验证标头。现在我正在发出两个 fetch 请求,一个用于获取现有详细信息,一个用于 PUT 新详细信息。我的第一个GET
请求已成功发出,我可以看到预填充的数据,但我的第二个POST
请求不起作用。我究竟做错了什么?这是我的代码的外观。https://codesandbox.io/s/dawn-breeze-itinq?file=/src/App.js
解决方案
const getUsers = async () => {
let myHeaders = new Headers();
myHeaders.set('Authorization', 'Basic ' + credentials);
const requestOptions = {
method: 'GET',
headers: myHeaders,
redirect: 'follow',
};
try {
const response = await fetch(`${APIlink}/users`, requestOptions);
const result = await response.json();
setData(result);
} catch (err) {
setErr('Incorrect Password. Please Retry.');
}
};
useEffect(() => {
getUsers();
}, []);
由于您没有提到任何依赖数组,因此您在每次渲染时都会调用 useEffect。所以在你的情况下会发生什么,
你的组件渲染——> useEffect 被调用——> 进行 api 调用——> 你设置状态——> 组件重新渲染——> useEffect 被调用——> 进行 api 调用,这个循环永远持续下去。
useEffect(() => {
....
}); => this useEffect will trigger on first render and every re-render
useEffect(() => {
...
}, []); => this will trigger only for the first time when the component is mounted
useEffect(() => {
...
}, [value]); => triggers on first render and whenever the value changes
推荐阅读
- spring-boot - Springboot actuator refresh 和 bus-refresh 总是返回 401 Unauthorized
- solr - 通过 pysolr 包使用 min_rf 功能
- java - RestTemplate 连接超时
- flutter - 我收到此错误 getter 'length' was called on null Receiver: null : 尝试调用:length I/flutter
- r - r 用过滤器找到一行然后替换单个单元格值
- c# - 如何将多个参数传递给.net core 3.1上的存储过程
- kubernetes - 为什么 systemTap 脚本在操作员错误附近报告读取错误?
- rsa - 无法使用 SubtleCrypto Web Crypto API 解密使用 PyCryptodome 加密的 RSA-OAEP 消息
- mysql - 如何优化具有小于运算符的查询?
- python - 如何在 Python 3 中按子键日期时间对该字典进行排序