使用添加按钮在 React 中添加输入

2023-12-03

我正在尝试制作一组​​可以复制或删除的输入。

我发现并使用了以下组合:https://jsfiddle.net/69z2wepo/36745/这是(因为上面的代码不处理删除):https://codepen.io/lichin-lin/pen/MKMezg

我可能不需要指向特定的输入,因为在我的界面中,您应该始终只在前面的输入已填满的情况下才添加新的输入(我稍后会设置条件),因此只删除最后一个。因此,我可以使用一个简单的计数器作为所有这些问题的解决方案(尽管我需要 3-4 个计数器来处理不同的输入类型)。

/* ************************************* */
/* ********       IMPORTS       ******** */
/* ************************************* */
import React, { Component } from 'react';
import { Card, CardBlock, Button, InputGroup, Input } from 'reactstrap';
import ProviderInfos from '../ProviderInfos/ProviderInfos';

/* ************************************* */
/* ********      VARIABLES      ******** */
/* ************************************* */

const count = 0;

/* ************************************* */
/* ********      COMPONENT      ******** */
/* ************************************* */
export default class SearchExtendedComponent extends Component {

    constructor(props) {
        super(props);
        this.state = { inputList: [] };
        this.incrementCount = this.incrementCount.bind(this);
        this.decrementCount = this.decrementCount.bind(this);
    }

    incrementCount() {
      const inputList = this.state.inputList;
        this.setState({
            count: this.state.count + 1,
            inputList: inputList.concat(<Input key={count} />),
        });
    }
    decrementCount() {
      const inputList = this.state.inputList;
        this.setState({
            count: this.state.count - 1,
            inputList: inputList.concat(<Input key={count} />),
        });
    }
    render() {
        return (
            <Card>
                <CardBlock className="main-table">
                    <InputGroup>
                        <Input placeholder="Type1" />
                        <ProviderInfos />
                    </InputGroup>
                    {/* THE IDEA IS TO HAVE AN ADD AND REMOVE BUTTON FOR EACH TYPE */}
                    <InputGroup className="add-more">
                        <button onClick={this.incrementCount}>Add input</button>
                        {this.state.inputList}
                    </InputGroup>
                    <InputGroup>
                        <Input placeholder="Type2" />
                        <ProviderInfos />
                    </InputGroup>
                    <InputGroup>
                        <Input placeholder="Type3" />
                        <ProviderInfos />
                    </InputGroup>
                    <Button color="secondary">Options</Button>{' '}
                    <Button id="btn">Exécuter</Button>
                </CardBlock>
            </Card>
        );
    }
}

我在控制台中收到错误:

Warning: flattenChildren(...): Encountered two children with the same key, `1:$0`. Child keys must be unique; when two children share a key, only the first child will be used.

这似乎与所发生的情况相符:

在“添加”按钮停止工作之后,仅添加第一个新输入。

正如你所看到的,我目前正在函数中声明输入(或者至少在我看来我是......这不是吗?const inputList = this.state.inputList;吗?)我认为这就是我应该在“计数”旁边声明的问题,但我尝试这样做:

const inputList = this.state.inputList;

const propTypes = { inputList: React.PropTypes.inputList, };

导致应用程序根本无法加载:“无法读取未定义的属性‘状态’”。

不仅如此,这对我来说似乎并不是干净的重构代码,因为我做了两次,并且请记住,我将不得不更多地重复此代码,因为添加和删除功能(和按钮)都会必须有三到四种不同的输入类型。

更新:将删除按钮部分移至另一个问题:React:使用按钮添加/删除组件:删除不起作用


在初始状态下添加计数。

this.state = { inputList: [] , count :0}; 

然后删除这一行const count = 0;

由于您使用 count 作为密钥 也将其更改为。

<Input key={this.state.count} />

我制造了一个jsfiddle对于另一个问题,这个概念是相似的,所以它可能会有所帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用添加按钮在 React 中添加输入 的相关文章

随机推荐

  • Spark 不会在地图函数内的控制台上打印输出

    我有一个在集群模式下运行的简单 Spark 应用程序 val funcGSSNFilterHeader x String gt println x contains servedMSISDN x contains servedMSISDN
  • 如果 ObjectDataSource 不是大型应用程序的答案,那么什么才是呢?

    引用 的答案安德鲁 黑尔 on the 这个问题 对象数据源适合小型企业 项目 但它们无法很好地扩展 你正在嵌入数据层 您的 UI 层中的信息 应用 我建议你 仅将它们用于非常小的情况 应用程序和暂存器测试 东西 如果您做出设计决定 使用它
  • 将枚举绑定到 WinForms 组合框,然后设置它

    很多人已经回答了如何在 WinForms 中将枚举绑定到组合框的问题 就像这样 comboBox1 DataSource Enum GetValues typeof MyEnum 但如果无法设置要显示的实际值 那么这是毫无用处的 我努力了
  • while 语句之后的 else 语句,以及字符串与字符串列表的比较?

    我正在尝试创建一个小型测试脚本 将一些内容附加到注释中 下面包含的是我将在脚本中执行的主要函数 问题似乎是我无法得到else块运行时whileblock 的计算结果为 false 也就是说 当它的计算结果不是这四个选项之一时 while块只
  • 字典不显示特定键(数值)的项目

    这是一篇长文 但留在我身边 我有一个Dictionary将 PO 另存为Key和 SO 作为项目 可能存在某个 PO 具有多个 SO 的情况 我在工作表中的 Excel 数据 其中字典获取的值如下所示 用于填充的代码Dictionary 工
  • 无法使用node-xmpp客户端连接到GCM

    我正在尝试使用 node xmpp 运行 gcm 服务器 但 xmpp 客户端似乎根本没有打开并在超时后关闭 var xmpp require node xmpp client var options type client jid ema
  • 在VS2008中配置调试器的超时时间

    我在 Delphi 应用程序中使用 C Service 问题是如果我一段时间没有单击任何内容 VS 将停止调试器 它看起来像是一个调试超时问题 但我在 VS 中找不到任何相关配置 有谁知道是否有这样的配置以及它在哪里 感谢您的帮助 好吧 我
  • Windows 系统托盘图标 - 控制位置

    我有一些我编写的旧应用程序 在 Delphi 中 由于各种原因 它们使用系统托盘图标 大多数都使用 AppControls TacTrayIcon 或其他一些类似的组件 这是我的问题 如何控制position托盘图标 即相对于系统时间的位置
  • R:使用 rollapply 和 ddply 进行分组滚动窗口线性回归

    我有一个包含多个分组变量的数据集 我想在其上运行滚动窗口线性回归 最终目标是提取斜率最低的 10 个线性回归 并将它们一起平均以提供平均最小变化率 我找到了使用 rollapply 来计算滚动窗口线性回归的示例 但我有一个额外的复杂性 我想
  • Facebook API / Android:墙贴发布时图像附件不起作用

    我有以下代码 它可以工作并发布消息部分 但附件部分不起作用 我怀疑这与将 JSON 作为字符串传递有关 脸书回归 id 23522646737635675 所以这不是一个错误 Bundle params new Bundle params
  • ggplot 中的双点

    我找不到密度周围双点的文档 set seed 1234 df lt data frame cond factor rep c A B each 200 rating c rnorm 200 rnorm 200 mean 8 print he
  • 设计“find_first_by_auth_conditions”方法说明

    我使用的两种方法Devise Method1 def self find first by auth conditions warden conditions conditions warden conditions dup where c
  • 计算两个地址之间的距离时出现错误

    我有以下脚本 用于电子表格中计算两个城市或一个城市与另一个城市的邮政编码之间的行驶距离 它正在大约 25 个地点同时运行 为了更好地解释 我有一个单元格 B3 每次我都会进入一个新城市 然后 该脚本在与我的 25 个工厂位置相邻的单元格中使
  • 在您的路径上找不到 Git 或 Cordova (Windows/Netbeans),在 AppData/Local 下找不到 GitHub,FIX 2015

    Error NetBeans 在您的路径上找不到 git 或 cordova When尝试在 Netbeans 中创建新的 Cordova 应用程序 怎么修 gt 答案可以在下面找到 如果有人想知道如何让 Cordova 在 Netbean
  • Java多线程仅用于2台计算机,如何在main中执行

    我正在尝试让至少两台计算机连接到我的服务器 我将如何启动第二个线程 public static void main String args throws InterruptedException Create the server whic
  • [MASM]另一个“无法使用具有 32 位地址的 16 位寄存器”错误

    我正在使用 MASM 汇编器学习汇编语言 当我尝试使用以下命令汇编一个简单文件时 我遇到了困难 ml c test asm和test asm文件看起来像 386 model flat code MOV BP WORD PTR BP 4 EN
  • 如何在Android中定义回调?

    在最近的 Google IO 期间 有一个关于实现 Restful 客户端应用程序的演示 不幸的是 这只是一个高层讨论 没有实现的源代码 在此图中 在返回路径上有对其他方法的各种不同的回调 我如何声明这些方法是什么 我理解回调的想法 在发生
  • E0513 “const char *”类型的值无法分配给“LPCWSTR”类型的实体

    你好 我试图在屏幕上绘制一个窗口 我两周前写了这个 它有效 但现在我重写了它 完全相同 我收到错误 有人可以帮忙吗 错误是 E0167 const char 类型的参数与 LPCWSTR 类型的参数不兼容 和 E0513 const cha
  • 如何附加两个音频文件?

    我想在 iPhone 中附加两个音频文件 请帮助我做到这一点 我得到了解决方案 以下是执行此操作的示例代码 AVMutableComposition composition AVMutableComposition composition
  • 使用添加按钮在 React 中添加输入

    我正在尝试制作一组 可以复制或删除的输入 我发现并使用了以下组合 https jsfiddle net 69z2wepo 36745 这是 因为上面的代码不处理删除 https codepen io lichin lin pen MKMez