我在Reactjs中有一个用户编辑页面,我在其中获取用户详细信息并将其填充到相应的输入字段中。问题是在获取和显示数据之后,我无法编辑字段。
我的代码是:
function EditProfile(props) {
const [user, setUser] = useState()
useEffect(() => {
const fetchUserInfo = async () => {
const profileConfig = {
method: 'GET',
headers: {
'Authorization': 'Bearer ' + auth.token
}
};
fetch(`http://localhost:4000/api/v1/user/me`, profileConfig)
.then(response => response.json())
.then(response => {
console.log("response: ", response.user);
if (response.success === true) {
setUser(response.user)
} else {
alert(response.message)
}
},
(error) => {
alert('User fetching faied: ' + error)
})
}
fetchUserInfo()
}, [])
return (
<form>
<input type="text" value={user.name} name="name" />
</form>
)
}
对应的名称将显示在此输入字段中,但不可编辑。如何解决这个问题?
发布于 2020-06-01 13:27:21
您尚未在input
上添加React建议将其设置为controlled component的onChange
函数。拥有受控输入的好处是,您可以在整个React组件中使用该值,并且不需要在输入时触发事件或访问DOM来获取该值。
如果你不想创建一个受控组件,你可以这样做:
<input type="text" defaultValue={user.name} name="name" />
使用defaultValue
而不是value
。因为在React呈现生命周期中,表单元素上的value属性将覆盖DOM中的值。这样,您希望React指定初始值,但保留后续更新不受控制,从而创建一个uncontrolled component。
如果您创建一个受控组件,则必须指定一个函数来处理更改,并通过@Vaibhav:https://stackoverflow.com/a/62133180/4207394将其设置为如下答案所指定的状态
发布于 2020-06-01 13:20:23
在React中,受控组件需要值和更改处理程序。
function EditProfile(props) {
const [user, setUser] = useState({name: ''})
useEffect(() => {
/*
....
*/
}, [])
const handleChange = e => {
setUser({...user, name: e.target.value})
}
return (
<form>
<input type="text" onChange={handleChange} value={user.name} name="name" />
</form>
)
}
https://stackoverflow.com/questions/62133040
复制相似问题