我正在使用React-Hook-Form创建页面,用于更新用户个人数据。一旦页面加载完成,我使用
我将获取到的值放入
useEffect
来获取用户当前的个人数据,并将其设置为表单的默认值。我将获取到的值放入
<Controller />
的defaultValue
中。
然而,在文本框中并没有显示默认值。
以下是我的代码: import React, {useState, useEffect, useCallback} from 'react';
import { useForm, Controller } from 'react-hook-form'
import { URL } from '../constants';
const UpdateUserData = props => {
const [userData, setUserData] = useState(null);
const { handleSubmit, control} = useForm({mode: 'onBlur'});
const fetchUserData = useCallback(async account => {
const userData = await fetch(`${URL}/user/${account}`)
.then(res=> res.json());
console.log(userData);
setUserData(userData);
}, []);
useEffect(() => {
const account = localStorage.getItem('account');
fetchUserData(account);
}, [fetchUserData])
const onSubmit = async (data) => {
// TODO
}
return (
<div>
<form onSubmit={handleSubmit(onSubmit)}>
<div>
<label>User Name:</label>
<Controller
as={<input type='text' />}
control={control}
defaultValue={userData ? userData.name : ''}
name='name'
/>
</div>
<div>
<label>Phone:</label>
<Controller
as={<input type='text' />}
control={control}
defaultValue={userData ? userData.phone : ''}
name='phone'
/>
</div>
<button>Submit</button>
</form>
</div>
);
}
export default UpdateUserData;
调用的API运行良好,实际上将值设置为userData
状态。{
name: "John",
phone: "02-98541566"
...
}
我也尝试了在useEffect()
中使用模拟数据来setUserData
,但它也不起作用。上面的代码有什么问题吗?