【问题标题】:Why won't react modal input value populate when state is updated?为什么在状态更新时不会响应模态输入值填充?
【发布时间】: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


【解决方案1】:

如果您使用value 设置值,那么当用户对其进行编辑时,您需要确保您指定的onChange 函数会更新该值,以便在下一次渲染时更新该值。

看起来您有一个值 (props.modalVal),您应该将其用作 value(请注意,您不需要 useEffectuseState,因为更改道具会导致重新渲染)。因此,您需要确保 props.handleChange 更改 modalValue

类似这样的:

<Input onChange={props.handleChange} value={props.modalValue} />

在父组件中:

const ParentComponent = ()=> {
  const [modalValue, setModalValue] = useState('initialValue');

  const handleChange = (event) => {
    setModalValue(event.currentTarget.value);
  };

  return (
    <EditModal handleChange={handleChange} modalValue={modalValue} />
  )
}

【讨论】:

  • 我可以发誓我已经试过了!!无论如何,它奏效了。谢谢!!
  • 通常当我遇到新事物时,我会先尝试正确的方法,不会注意到拼写错误或一些小错误,因此它不起作用。然后我尝试其他事情 3 小时/天,直到我意识到我一开始是对的..!
猜你喜欢
  • 2021-09-27
  • 1970-01-01
  • 2021-02-17
  • 1970-01-01
  • 1970-01-01
  • 2020-01-28
  • 1970-01-01
  • 1970-01-01
  • 2021-11-27
相关资源
最近更新 更多