reactjs - 如何在输入表单中设置初始获取的数据
问题描述
您好,我正在获取数据,然后我想在输入表单中将它们显示为初始值,但是即使我在 console.log 中看到数据,我也得到未定义而不是值,因此正确获取这里是我的代码示例简化
也许我应该使用useEffect?因为获取数据有延迟,首先什么都没有,然后当接收到数据时,输入没有刷新?我不知道如何使用它,我的代码在打字稿中
export default function Form() {
const name = data.name;
console.log(name); //here I can see name is fetched
const [company, setCompany] = useState<string>(`name: ${name}`); // name: undefined
return (
<form>
<input
value={company}
onChange={(e) => setCompany(e.target.value)}
label="Company"
/>
```
解决方案
功能组件以这种方式工作 - 每次渲染都会调用整个函数,这意味着每次渲染 -
const name = data.namose;
console.log(name);
const [company, setCompany] = useState<string>(`name: ${name}`);
这三行被调用,在第一次运行时它会将 undefined 设置为变量name
,它将打印 undefined 然后创建状态company
并将其设置为 undefined。下一次运行(或下一次......)当 data.name 未定义时,它将 name 设置为实际数据。React 钩子知道这不是第一次useState
调用该函数,因此它不会company
再次设置初始状态,这是预期的行为,因此每次渲染您的状态都不会重置为初始状态。
正如您所提到的,我建议您做的是,useEffect
如果这符合您的要求,请在组件内获取数据,然后在效果内设置状态,不要向useEffect
函数发送依赖项数组,这样它就会起作用就像componentDidMount
在类组件中一样,它只会在第一次安装组件时运行一次。
推荐阅读
- vector - 同时可变访问保证不相交的大向量的任意索引
- methods - 方法声明中不应该有冒号(':')吗?
- .net - 无法使用 HidLibrary 找到连接的 HID 设备
- c# - 调用 actionContext.Request.Content.ReadAsStringAsync().Result 是否会阻止自定义模型绑定器中的任何内容?
- c# - 如何检查 API 进程的当前状态
- python - 如何改变python图中两个类点的颜色?
- angular - Observable 中返回的对象的合适模式和类型
术后手术后 - types - 没有构造函数的 Purescript `data` 类型是什么意思?
- java - 为什么数据源不匹配从 TomEE 1.7.4 迁移到 8.0.0-M2?
- c# - 表单提交获取空模型