当前位置: 首页 > 面试题库 >

如何在ReactJS中使用受控组件实现动态表单?

卫浩瀚
2023-03-14
问题内容

当我查看controlled form components
react.js官方网站的参考中的示例时,我想知道应该如何实现这样一种方法,在该方法form中,您将能够动态地控制元素removeadd
input元素,使它们成为受控组件?这有可能吗?

在示例中,我们可以看到:

class NameForm extends React.Component {
  constructor(props) {
    super(props);
    this.state = {value: ''};

    this.handleChange = this.handleChange.bind(this);
    this.handleSubmit = this.handleSubmit.bind(this);
  }

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

  handleSubmit(event) {
    alert('A name was submitted: ' + this.state.value);
    event.preventDefault();
  }

  render() {
    return (
      <form onSubmit={this.handleSubmit}>
        <label>
          Name:
          <input type="text" value={this.state.value} onChange={this.handleChange} />
        </label>
        <input type="submit" value="Submit" />
      </form>
    );
  }
}

由于工作的性质,我经常发现自己必须执行这种形式。此外,我不知道addremove input元素直接-
我管理的自定义组件,但为了简单起见这里的缘故,我要求基本的表单元素。


问题答案:

如何动态地添加/删除输入元素?

是的,可以添加/删除input元素dynamically,但是为此您需要注意以下几点:

1- 正确绑定事件。

2- 数组,用于分别存储每个输入元素的值。

3-用户在任何输入元素中填充值时,仅在状态中更新该特定值。

逻辑:

保持内部状态的数组,该数组将存储值。使用 #array.map
为每个数组值创建ui(输入元素)。创建字段时,请button对每个字段使用remove
,并在其中传递字段索引function,这将帮助您确定要删除的字段,也可以执行相同的操作onChange

检查以下示例:

class App extends React.Component {

  constructor(props) {

    super(props);

    this.state = { values: [] };

    this.handleSubmit = this.handleSubmit.bind(this);

  }



  createUI(){

     return this.state.values.map((el, i) =>

         <div key={i}>

            <input type="text" value={el||''} onChange={this.handleChange.bind(this, i)} />

            <input type='button' value='remove' onClick={this.removeClick.bind(this, i)}/>

         </div>

     )

  }



  handleChange(i, event) {

     let values = [...this.state.values];

     values[i] = event.target.value;

     this.setState({ values });

  }



  addClick(){

    this.setState(prevState => ({ values: [...prevState.values, '']}))

  }



  removeClick(i){

     let values = [...this.state.values];

     values.splice(i,1);

     this.setState({ values });

  }



  handleSubmit(event) {

    alert('A name was submitted: ' + this.state.values.join(', '));

    event.preventDefault();

  }



  render() {

    return (

      <form onSubmit={this.handleSubmit}>

          {this.createUI()}

          <input type='button' value='add more' onClick={this.addClick.bind(this)}/>

          <input type="submit" value="Submit" />

      </form>

    );

  }

}



ReactDOM.render(<App />, document.getElementById('container'));


<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>

<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>



<div id='container'/>

检查工作情况jsfiddle:https :
//jsfiddle.net/mayankshukla5031/ezdxg224/



 类似资料:
  • 问题内容: 几乎在每个ReactJS教程中,甚至在用于处理输入更改的官方文档中,都建议使用onChange。我们使用状态作为值,并通过onChange对其进行更改。这会在每个按键中触发渲染。所以, 渲染真的那么便宜吗? 输入值不保存在DOM中吗?因此DOM和VirtualDOM之间没有区别,因此尽管渲染发生了什么变化?(可能是错误的假设)。 出于娱乐和学习目的,我尝试了以下方法: 使用自定义函数和

  • 本文向大家介绍ElementUI表格组件如何实现动态表头?相关面试题,主要包含被问及ElementUI表格组件如何实现动态表头?时的应答技巧和注意事项,需要的朋友参考一下 不用template包裹也行

  • 伙伴。我有一个菜单组件在我的next.jsWeb应用程序。菜单的数据是通过GraphQL动态生成的。我想要菜单组件的服务器端渲染。我尝试使用getStatic Props()在服务器上呈现数据。但是getStatic Props()不能在组件上工作,它只能在页面上工作。 现在,我该如何解决这个问题呢?我不想在每一页的菜单上重复相同的代码,我想重复使用代码或类似的东西。请帮我解决这个问题。提前感谢。

  • 以下是: code>button.jsx的来源并不重要,它有一个常规的HTML单选按钮,触发本机DOM事件 预期流量为: null 尝试:在的onChange处理程序中: 问题: 尝试:在的onChange处理程序中:

  • 我知道我可以在呈现组件时传递。我还知道方法。但问题是,不太有用,因为我的组件不知道它的初始状态。我有。所以我想在渲染的时候传递它。 类似这样的内容(伪代码): 我该怎么办? 假设我有一个组件。当我第一次呈现它时,初始状态与数据库中当前注释的快照相对应。当用户包含注释时,该列表将发生更改,这就是为什么它应该是而不是。现在,为了呈现注释的初始快照,我应该将它传递给组件,因为它无法知道它。我感到困惑的是

  • 问题内容: 我是ReactJS的新手,正在其中创建一个简单的TODO应用程序。实际上,这是一个非常基本的应用程序,没有数据库连接,任务存储在数组中。我现在想添加分页功能,并添加了“编辑和删除”功能。如何实施?任何帮助将不胜感激。谢谢…!! 问题答案: 我最近在纯React JS中实现了分页。这是一个工作示例:http : //codepen.io/PiotrBerebecki/pen/pEYPbY