无法更改输入字段中的值

Posted

技术标签:

【中文标题】无法更改输入字段中的值【英文标题】:Cannot change value in input fields 【发布时间】:2019-12-02 21:36:41 【问题描述】:

这是我的代码:

<Input
      onChange=(e) => someChange(e)
      valid=check.length !== 0
      invalid=check.length === 0
      type="text"
      name="name"
      id="name"
      placeholder=something
      value=props.someProp ? props.user.name : ''
/>

所以这里发生的是当我输入props.someProp 我的值被检索。问题是我无法编辑该字段。请注意user 对象会在此屏幕出现时填充。

我怎样才能进行某种健全性检查,以便我仍然得到填充的值,但我可以在之后对其进行编辑?

谢谢。

【问题讨论】:

您不能动态更改props - 您必须将它们存储在state 中。也可以提供someChange的代码 someChange 是做什么的?也许如果你像value= props.user.name? '' : props.someProp这样反转逻辑? someChange 基本上得到e.target.value 并存储它。 您也不一定需要有效和无效,因为一个布尔值将与另一个布尔值相反 @MisterMister “并将其存储”在哪里?父组件?这个组件的状态?您的问题中没有足够的信息来获得正确答案,请包括使用 的整个父组件,以及引用的任何函数。 【参考方案1】:

如果您使用的是无状态组件AND React 16.8+,请使用 hooks。这将允许您的stateless component 包含state。 React 调用这些function components

您之前可能将这些称为“无状态组件”。我们现在引入了从这些中使用 React 状态的能力,因此我们更喜欢使用“函数组件”这个名称。

示例

const Foo = props => 
  const [name, someChange] = useState(props.someProp ? props.user.name : '');

  return (
    <Input
      onChange=(e) => someChange(e.target.value)
      value=name
      ...
    />
  );

可以在here找到有关钩子的文档。

【讨论】:

【参考方案2】:

设置组件挂载的初始状态。之后,输入的值将设置在 onChange 上。

constructor(props)
  super(props);
  this.state(name:'');


componentDidMount()
  this.setState(name: props.someProp ? props.user.name : '');


someChange(e)
 let name = e.target.name;
 this.setState([name]: e.target.value);


<Input
  onChange=(e) => someChange(e)
  valid=check.length !== 0
  invalid=check.length === 0
  type="text"
  name="name"
  id="name"
  placeholder=something
  value=this.state.name
/>

【讨论】:

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

我无法更改 React 挂钩中的输入值

如何更改输入反应本机的值

跨越文本输入字段?

Sylius 中选项值中的自定义字段不可见

无法根据在搜索字段中输入的值显示表中的数据[关闭]

Zapier CLI:当依赖字段更改时,如何清除输入字段的值?