代码之家  ›  专栏  ›  技术社区  ›  g_b

使用React钩子时更新表单域

  •  0
  • g_b  · 技术社区  · 4 年前

    我正在学习React钩子,现在在一个有许多领域的表单中尝试它。我被困在如何更新表单字段值。

    const [user, setUser] = useState({ id: 0, username: "", password: "" });
    

    然后我在每个字段(用户名、密码)上都附加了一个handleChange函数,我现在做的是:

    function handleChange(event) {
        user[event.nativeEvent.target.name] = event.target.value;
    }
    

    直接编辑用户字段可以吗?我的印象是,任何编辑都应该使用set函数(在本例中是setUser)来完成。但是如果我把setUser放在handleChange中,它的每一个类型都会根据我的理解重新呈现。我在读一篇文章,他就是这么做的:

    enter image description here

    或者就是这样?

    2 回复  |  直到 4 年前
        1
  •  1
  •   Frenco Dev. Rafiq    4 年前

    要引起重新渲染,必须调用setState。在您的情况下,不直接编辑状态值,您应该使用旧状态将整个用户状态更新为新状态。

    function handleChange(event) {
        user[event.nativeEvent.target.name] = event.target.value; // instead of doing this
        // do this
        let newUserObject = Object.assign({}, user, {
            [event.nativeEvent.target.name]: event.target.value
        })
        setUser(newUserObject)
    }
    

    setName 每次用户在输入中键入内容时,on change都会导致重新呈现。但是React使用了一种称为virtualdom的方法,过滤DOM上由于状态变化而更新的内容,并且只更新DOM上所需的部分,这是非常有效的。

        2
  •  1
  •   wentjun    4 年前

    据我所知,你的车没有毛病 NameForm 组件,并使用 useState 钩子正在做它想要做的事情:这就是重新渲染 input 当值发生变化时。这将确保组件的状态随着用户在输入上的类型而更新。