【发布时间】:2020-09-20 00:19:30
【问题描述】:
我有一个在按钮单击时触发的模式,需要用用户可以编辑的输入值填充该模式。单击按钮时,模态状态会更新,但输入:
一个。不反映更新的状态作为它的值(当我使用'defaultValue'时会发生这种情况 --或者--
b.不会让用户编辑输入中的值(当我使用“值”时会发生这种情况。
如何使用当前状态填充输入并进行编辑?不应该更改输入值设置的状态以触发模态的重新渲染吗?
function EditModal(props) {
const [value, setValue] = useState(props.modalVal);
const[hidden, setHidden] = useState(true)
const[initialRender, setInitialRender] = useState(true)
useEffect(()=>{
setInitialRender(false)
},[])
useEffect(() => {
setValue(props.modalVal)// <-- why doesn't this update input value?
}, [props.modalVal]);
useEffect(()=>{
if(!initialRender){
setHidden(false)
}
},[value])
return (
<Modal hidden={hidden} >
<Text>Edit Item</Text>
<form action="submit" onSubmit={props.submit}>
<Input onChange={props.handleChange} defaultValue={value} />
<Button>OK</Button>
</form>
</Modal>
)
}
【问题讨论】:
-
您很可能应该使用
value而不是defaultValue我不知道Input的实现,但是在正常的input中,defaultValue只使用一次,不会反映任何更新。 -
您是否能够登录并看到
props.modalVal正在正确更新? -
真的,这里的简单答案是不要从道具镜像状态。只需使用
value={props.modalVal}。
标签: reactjs react-hooks use-effect use-state