javascript - 学习者问题 : Functions for every text field. 有没有办法制作一个可以处理多个文本字段的通用函数

标签 javascript reactjs typescript

我的项目是 SPFX、React/TypeScript/Office UI Fabric。我发现我正在为我正在制作的表单的每个文本字段创建函数。是否有一个函数可以处理多个相似的字段,但每个文本字段都有自己独特的状态。

文本字段功能示例:

private _onReason = (ev: React.FormEvent<HTMLInputElement>, newValue?: string) => {
    this.setState({
      Reason: newValue
    });
  }

还有另一个几乎相同的:

private _onPurpose = (ev: React.FormEvent<HTMLInputElement>, newValue?: string) => {
    this.setState({
      Purpose: newValue
    });
  }

我的目标是允许用户提交这些多个文本字段的状态,但只是减少代码。

我已阅读此内容,但不知道如何实现到我的项目中: https://www.pluralsight.com/guides/handling-multiple-inputs-with-single-onchange-handler-react

我认为阻止我实现该pluralsight解决方案的一件事是我正在使用MS Fabric UI和React.FormEvent<HTMLInputElement>, NewValue?: string)我在下面尝试的处理程序函数不喜欢它:

public handleChange (evt: React.FormEvent<HTMLInputElement>, newValue?: string) {
    const value = evt.target.value;
    this.setState({
      ...this.state,
      [evt.target.name]: value
    });
  }

它不喜欢 const value 末尾的值...它不喜欢 [evt.target.name] 末尾的名字要么。

更新:尝试了 Peter 的链接建议中的某些内容后,我可以消除上面的错误之一(值错误),但它仍然给我 [evt.target.name] 的错误。 (准确的名称)。

最佳答案

你的问题很容易理解,也很简洁。我也喜欢您提供的有关您的问题的一些背景的链接。我使用 React hooks,我发现减少代码的最简单方法是在 JSX 的属性中使用匿名函数,如下所示:

<label>
  First name
  <input
    type="text"
    onChange={(e) => {setFirstName(e.target.value)}}
  />
</label>
<p> {firstName} </p>

但是,它看起来会有点不同,因为我对 TypeScript 不太熟悉,所以你需要为 e(event) 和 firstName(string) 提供一个类型,并且你没有使用 React hooks。对于您来说,您将必须解构您的状态对象,并且您将拥有更多语法,因为您有一个包含多个对象的更大状态。希望这可以帮助!

关于javascript - 学习者问题 : Functions for every text field. 有没有办法制作一个可以处理多个文本字段的通用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59565467/

相关文章:

reactjs - react 钩子(Hook) : Display global spinner using axios interceptor?

angular - Angular 的 HTTP 请求中不包含特定参数

javascript - 函数名称末尾的 $ 符号表示什么?

javascript - 如何旋转文本标签,使其不会上下颠倒 (SVG)?

javascript - 仅限网络语音 API 数字

javascript - 如何更改图像的名称?

javascript - node,js 使用变量作为键名向 json 添加外部级别

javascript - React-Redux 组件不反射(reflect) Redux Store 中的变化

javascript - 从查询字符串中提取数据,然后调用 API 和呈现组件的最佳位置是什么?

angularjs - Angular 2 - @Input 不更新 super 组件上的模型