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

添加/删除输入字段

曹景铄
2023-03-14
问题内容

我对ReactJS还是很陌生,我很喜欢它,但是在Angular中似乎有一些绑定之类的事情似乎更容易。

我想要一个表单,用户可以在其中单击按钮以添加额外的输入字段。他们还可以随时“删除”输入字段。

在提交时,我想将这些输入作为数组获取,即传递dynamicInputs到包含的数组的API name

这就是我所做的(由于我将React像Angular一样对待,这可能是错误的):

var React = require('react');

module.exports = React.createClass({
    addInputField: function(e) {
        e.preventDefault();

        var inputs = this.state.inputs;
        inputs.push({name: null});
        this.setState({inputs : inputs});
    },
    removeInputField: function(index) {
        var inputs = this.state.inputs;
        inputs.splice(index, 1);
        this.setState({inputs : inputs});
    },
    handleSubmit: function (e) {
        e.preventDefault();
        // What do I do here?
    },
    getInitialState: function() {
        return {inputs : []};
    },
    render: function (){
        var inputs = this.state.inputs;
        return (
            // Setting up the form
            // Blah blah
           <div className="form-group">
               <label className="col-sm-3 control-label">Dynamic Inputs</label>
               <div className="col-sm-4">
                   {inputs.map(function (input, index) {
                       var ref = "input_" + index;
                       return (
                           <div className="input-group">
                                <input type="text" className="form-control margin-bottom-12px" placeholder="Enter guid" value={input.name} ref={ref} aria-describedby={ref} />
                                <span className="input-group-addon" onClick={this.removeInputField.bind(this, index)} id={ref} ><i className="fa fa-times"></i></span>
                           </div>
                       )
                   }.bind(this))}
                    <button className="btn btn-success btn-block" onClick={this.addInputField}>Add Input</button>
               </div>
           </div>
        );
    }
});

现在removeInputField不起作用!它只是一直删除最后一个条目。


问题答案:

每个人都<div className="input-group">必须有一个唯一的钥匙

<div className="input-group" key={index}>

这就是React区分渲染节点集合的方式。

参考文献:

  • https://facebook.github.io/react/docs/multiple-components.html#dynamic-children

UPD

正如@WiredPrairie在下面的评论中提到的那样,建议的解决方案远非理想之选,因为index它不够独特。相反,您需要创建带有一些唯一标识符的另一个数组(单调增长的序列就足够了),并使其与之并行this.state.inputs并使用其值作为键。

因此,在添加元素时,您将:

this.keys.push(++this.counter);

在移除上-用相同的方法从两者移除index。而在.map

<div className="input-group" key={this.keys[index]}>


 类似资料:
  • 添加/删除光晕是一组API,可以控制是否在3D地球周围显示 光晕 。 当使用addHalo() API添加光晕时,可以指定光晕颜色。默认设置下光晕是启用的。 controller.addHalo(0xFF0000); controller.removeHalo();

  • 问题内容: 我不太确定如何处理此问题。我希望我能到达那里。 例如,我在一个页面上有一张充满地址的表。这些计数是动态的(可以是5或10或任何其他计数)。我希望可以在一页上进行编辑。 我的方法是创建wtforms一个表单编辑一个地址,并乘以它在Jinja2的和附加到HTML propertys并在 从itereation,这样我就可以提取人工数据的每一行,并把它放回我的形式,当我想评估一下。 因此,此

  • 问题内容: 在iOS(Safari 5)上,我必须遵循以下输入元素(顶部内部阴影): 我想删除顶部阴影,但无法保存错误。 当前样式是: 问题答案: 您需要使用来覆盖默认的IOS样式。但是,仅选择CSS中的标记不会覆盖默认的IOS样式,因为IOS使用属性选择器添加了它的样式。因此,您的CSS将需要使用属性选择器来覆盖已预设的默认IOS CSS样式。 尝试这个:

  • 问题内容: 嗨,我必须从一个JList中选择一个元素,将其从第一个元素中删除。我创建的方法仅插入一个元素,覆盖最后一个元素,并且不会从第一个JList中删除所选项目。这是代码: 第一名单 通过此方法填充: 第二个列表,我要在其中插入从第一个列表中删除的项目: 这是无效代码: 谢谢 问题答案: 问题是 您可能要添加一个元素并立即将其删除,因为添加和删除操作都在同一listModel上。 尝试

  • ADDING AND REMOVING SOFTWARE Linux 或任何操作系统中最基本的任务之一便是添加和删除软件。您经常需要安装发行版中没有附带的软件,或者删除不需要的软件,这样就不会占用硬盘空间。 有些软件安装需要依赖其他软件才能运行,有时您会发现您可以在软件包安装过程中一次性下载所需的所有软件,软件包是一组文件(通常是库和其他依赖项),您需要这些文件才能使软件成功运行。当您安装一个包时

  • 我一直在寻找方法,让jQuery使用html5验证自动写入我所有的输入字段,但我很难告诉它在哪里写入它。 我想要这个 并在结束标记前自动添加所需 我想我可以做一些类似的事情 但它不起作用。任何帮助都非常感谢。

  • 大家好,所以我有这个MYSQl代码,我插入日期,当它发送和输入的日子,可以是从1做7。我怎样才能让MYSQl在输入天之后删除一行?例如:我在2021年22.03.2021下午3:54创建了一个产品,输入的过期天数是6天。我想删除产品后正好6天。

  • 问题内容: 我正在使用创建一个CheckList应用程序。我想知道如何添加滑动以删除。 这是我的ViewController.swift: 这是MyTableViewCell.swift: 我将iOS8用作部署目标(不确定会造成什么变化)。 问题答案: 添加以下两个功能: Swift 3.0: 斯威夫特4.2