gpt4 book ai didi

javascript - 是否有更 DRY 的方法来创建 React 文本输入表单元素?

转载 作者:行者123 更新时间:2023-11-29 17:39:36 26 4
gpt4 key购买 nike

在 React 和 React Native 中,公认的做法是包含 <input>表单域是包含一个onChange更新 state 的处理程序在每次击键时。例如:

<input type="text" value={this.state.valueField1} onChange={this.handleChangeField1} />

更新状态是为了防止在用户键入时将值恢复为原始值。

这会导致大量重复代码,从而违反了旧的 DRY(不要重复自己)原则。例如(基于 React Docs ):

  handleChangeField1(event) {
this.setState({valueField1: event.target.value});
}

handleChangeField2(event) {
this.setState({valueField2: event.target.value});
}

这里的问题是必须将字段名称“Field1”重复 3 次而不是一次(仅用于声明)并强制创建一个 onChange 逻辑,该逻辑可以轻松地(并且错误地)改变标准化的预期行为APP用户的UI组件。

问题:是否有一种更简洁、更少重复且风险更小的方法来包含 <input> ReactJS/React-Native 应用程序中的字段?

当我谈到保留组件的 native 行为时,我主要考虑的是在用户键入时不更改值。

作为引用,在简单的 HTML/VanillaJS 示例中,我们只需添加 <input value="{ServerSideValue}" name="field1">一次然后在我们需要的任何地方从 field1 获取值,从而保留 native 组件行为并且不会在声明中多次重复 field1。

最佳答案

这是我们经常使用的模式。我很确定它能回答您的问题:

class MyForm extends React.Component {
state = {
firstName: '',
lastName: ''
};

handleChange = e => {
this.setState({
[e.target.name]: e.target.value
});
};

render() {
return (
<div>
<input
name="firstName"
onChange={this.handleChange}
placeholder="Enter your first name"
value={this.state.firstName}
/>
<input
name="lastName"
onChange={this.handleChange}
placeholder="Enter your last name"
value={this.state.lastName}
/>
</div>
);
}
}

我给你举了个例子:

Edit Form State example

编辑:至于您对 native 行为的关注,您无需担心使用 onChange 更改 valueonChange 是一个事件回调,以便我们可以对该事件使用react。

有人担心 controlled vs uncontrolled输入,他们建议控制它们。这就是我将 value 提供回输入的原因。

如果您有任何问题,请告诉我进展情况。

关于javascript - 是否有更 DRY 的方法来创建 React 文本输入表单元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53876111/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com