反应受控输入

时间:2020-06-09 19:57:23

标签: reactjs

我收到错误消息“组件正在更改要控制的文本类型的不受控制的输入。输入元素不应从不受控制的状态切换到受控制的状态(反之亦然)”,但是我看不到输入的方式一开始就不受控制

import React, {useState, useEffect} from 'react'

const Inp = ({n, val, ud}) => {
    return <input type="text" value={val} name={n} onChange={ud} />
}

export function Proof(props) {

let groupId = props.match.params.groupId
const [val, setVal] = useState({})


if (val.length === 0) {
    return 'loading'
}

let ud = (event) => {
    setVal({
        ...val,
        [event.target.name]:event.target.value
    })
}  

return <div>
    <h2>Head</h2>

    <Inp n={'name'} id={0} val={val['name']} ud={ud} />
    <Inp n={'email'} id={1} val={val['email']}  ud={ud} />
    <p key={'un0'}>{val['email']}</p>
    <p key={'un1'}>{val['name']}</p>
</div>
}

1 个答案:

答案 0 :(得分:1)

这是因为您的初始状态只是一个空对象。这意味着val['name']val['email']最初是undefined

警告基本上是在说:“我的值以前没有定义,但现在是。所以我正在从不受控制的状态切换为受控制的状态。”

改为更改默认状态,以将所需的键包含为默认的空字符串。这将删除警告

const [val, setVal] = useState({name: '', email: ''})