在 React 中更改受控输入的值

Posted

技术标签:

【中文标题】在 React 中更改受控输入的值【英文标题】:Change value of controlled input in React 【发布时间】:2019-02-22 00:03:19 【问题描述】:

我正在寻找有关 React 受控/不受控/可控输入的帮助。

这里有一个图表来解释:

React Slider

如图所示,我有两个组件:

Slider 组件:从 0 到 50000 的范围输入。 第二个组件是文本输入。目前这是只读的并显示滑块的值。

我想做的事

文本输入当前是一个受控组件。相反,我想这样做,以便用户可以在文本框中键入。如果添加的文本既是数字又介于 0 到 50,000 之间,则滑块状态值将更新为键入的文本输入值。

这是我的代码:

  state = 
    sliderValue: 10000
  

handleChangeSlider = value => 
    this.setState(
      sliderValue: value
    )
  


<Slider
min=5000
max=45000
step=250
value=this.state.sliderValue
onChange=this.handleChangeSlider
/>

<input
className=amountInput
value=this.state.sliderValue
/>

我想到的一个可能的解决方案是在受控输入上覆盖一个新的“过滤器”输入。因此有两个输入,一个显示滑块值,一个输入新值。

我觉得我在这里遗漏了一些东西。

有没有人可以引导我走上正确的道路?

谢谢,

【问题讨论】:

现在有什么问题?滑块是否改变输入的值,输入是否改变滑块的值? 目前,文本输入不可编辑。如果我通过删除 value 属性并设置 defaultValue 来使其可编辑,则问题是文本输入不再遵循 this.state.sliderValue 的值。但是,如果我保留 value 属性,则输入不可编辑,这意味着输入不能用于输入新的滑块值 onChange 添加到您的输入中,&lt;input className=amountInput onChange=this.handleChangeSlider /&gt; 谢谢@seethrough。我试过这个。输入仍然显示滑块值。但是输入值仍然不可编辑,当我按任意键时,值变为 [object Object] 好的,我明白了。答案有点复杂,无法评论,我会给出答案。 【参考方案1】:

要使输入可编辑,请尝试以下操作:

handleInput = event => 
  this.setState(sliderValue: event.target.value)
 

<input className=amountInput value=this.state.sliderValue onChange=this.handleInput/>

别忘了在你的构造函数中绑定handleInput。

如果这段代码有任何问题,请随时发表评论。

【讨论】:

@Barney 我给你发了一封电子邮件。谢谢。

以上是关于在 React 中更改受控输入的值的主要内容,如果未能解决你的问题,请参考以下文章

如何在 React 中从头开始创建受控输入

React-Mobx 警告:组件正在更改不受控制的输入

受控组件和不受控组件的区别

React5.表单处理-受控组件

React5.表单处理-受控组件

浅谈react受控组件与非受控组件