我在处理输入值的变化时遇到了问题。这是我的React代码,onChange函数可以工作,但当我清除默认值时,直到进行另一次更改之前它才不打印任何内容。
<Form.Control
type="text"
placeholder="name"
defaultValue={this.state.name}
onChange={e=>console.log(e.target.value)}
/>
我只是为了测试写了 console.log。
我在处理输入值的变化时遇到了问题。这是我的React代码,onChange函数可以工作,但当我清除默认值时,直到进行另一次更改之前它才不打印任何内容。
<Form.Control
type="text"
placeholder="name"
defaultValue={this.state.name}
onChange={e=>console.log(e.target.value)}
/>
我只是为了测试写了 console.log。
值没有改变是因为在 ReactJS 组件重新渲染时,状态只会更改一次,并且在 onChange
上使用 console.log
不会更新状态的任何更改。因此,您需要在 onChange 事件中更新状态。
请尝试以下操作,我假设这是一个类组件,因为您使用了 this.state.name:
<Form.Control
type="text"
name="name"
placeholder="name"
defaultValue={this.state.name || ""}
value={this.state.name}
onChange={e=>this.setState({name:e.target.value})}
/>
更新
尝试使用不受控制的输入:
<Form.Control
type="text"
placeholder="name"
onChange={(e) => console.log(e.target.value)}
/>
使用值而不是默认值:
<Form.Control
type="text"
placeholder="name"
value={this.state.name || ""}
onChange={e=>console.log(e.target.value)}
/>
尝试使用空值代替null
<Form.Control
type="text"
placeholder="name"
value={this.state.name || ""}
onChange={e=>console.log(e.target.value)}
/>
console.log
这里不觉得有个打字错误吗? - DecPKconosle.log
而不是console.log
。 - user14779090console.log
中有一个拼写错误。 - Sanket ShahonChange
事件发生在输入框内容改变并且焦点从输入框移开的时候。当你清除name
后,虽然内容改变但是焦点仍然在输入框内,所以不会触发onChange
事件。我猜这可能能回答你的问题。你可以尝试使用value
而不是defaultValue
。 - Sanket Shah