如何为来自react js中的api的动态表单字段设置常规onchange?

2024-03-19

我正在使用 React 中的表单。

我面临的挑战是每当我为输入字段设置 onchange 处理程序时,它都会更改我拥有的所有输入字段的值。

表单输入字段已映射并且来自 api。我想要的是一个通用的更改处理程序来管理所有输入字段。

import React, { Component } from "react";
import {
  TextInputComponent,
  RadioInputComponent,
  SelectComponent,
} from "../../components/index";
import IntlMessages from "../../common/constants/IntlMessages";

class DummyForm extends Component {
  constructor(props) {
    super(props);
    this.state = {
      field: "",
      checkBox: "",
      options: "",
      radioField: "",
      error: "",
    };
  }
  componentDidMount() {
    const code = window.location.pathname.split("/")[2];
    this.props.getEmsForms(code);
  }

//this my on change handler and it would be great help if someone can tell where iam wrong.
  handleChange(e) {
    this.setState({
      [e.target.name]: e.target.value,
    }) 
  }

  submit = () => {
    const { field, checkBox, options, radioField } = this.state;
    const auth = this.props.user.data.user.access_token;
    this.props.updateEmailPhone({
      email,
      address,
      auth,
    });
  };

  render() {
    return (
      <React.Fragment>
        <div className="row justify-content-center py-2 my-2">
          <div className="col-sm-12 col-lg-5 col-md- border border-info bg-light">
            <div className="row p-3">
              {this.props.getForms.data
                ? this.props.getForms.data.map((item) => {
                    return (
                      <div className="col-12 p-2">
                        {item.inputType == "textbox" ? (
                          <TextInputComponent
                            key={item.fieldName}
                            label={item.fieldLabelText}
                            type="text"
                            placeholder={item.fieldName}
                            value={this.state.field}
                            onChange={(e) =>
                              this.handleChange(e, "field")
                            }
                          />
                        ) : item.inputType == "dropdown" ? (
                          <>
                            <label>{item.fieldLabelText}</label>
                            <select
                              className="custom-select "
                              id="inputGroupSelect01"
                              onChange={(e) =>
                                this.handleChange({ options: e.target.value })
                              }
                            >
                              {item.inputOptions.map((key) => (
                                <option>{key.value}</option>
                              ))}
                            </select>
                          </>
                        ) : item.inputType == "checkbox" ? (
                          <SelectComponent
                            name={"select2"}
                            value={this.state.checkBox}
                            label={item.fieldLabelText}
                            onChange={(e) =>
                              this.setState({ checkBox: e.target.value })
                            }
                          />
                        ) : item.inputType == "radio" ? (
                          <RadioInputComponent
                            title="gender"
                            value={this.state.gender}
                            name={item.fieldLabelText}
                            onChange={(e) => {
                              this.setState({ radioField: e.target.value });
                            }}
                          />
                        ) : null}
                      </div>
                    );
                  })
                : this.props.getForms.messages}

              <div className="row" style={{ marginTop: "50px" }}>
                {/* <div className="col d-flex justify-content-start">
              <button className="btn-danger" onClick={this.toggleModal}>
              Ja
              </button>
            </div> */}
                {this.props.getForms.data && (
                  <div className="col d-flex justify-content-end">
                    <button className="btn btn-success button-margin">
                      <IntlMessages id="blank.button" />
                    </button>
                  </div>
                )}
              </div>
            </div>
          </div>
        </div>
      </React.Fragment>
    );
  }
}

export default DummyForm;


您可以获得name, value, type and checked来自事件目标的属性并设置状态,其形状如下

{
  "input": "a",
  "select": "2",
  "radio": "3",
  "checkbox1": true,
  "checkbox3": true,
  "checkbox2": true
}
import React, { useState } from "react";
import "./styles.css";

export default function App() {
  const [state, setState] = useState({});

  const onChange = (e) => {
    const { name, value, checked, type } = e.target;
    const newVal = type === "checkbox" ? checked : value;

    setState({
      ...state,
      [name]: newVal
    });
  };

  return (
    <>
      <div className="section">
        <label>
          Input
          <input name="input" onChange={onChange} />
        </label>
      </div>
      <div className="section">
        <label>
          select
          <select name="select" onChange={onChange}>
            <option>1</option>
            <option>2</option>
            <option>3</option>
          </select>
        </label>
      </div>
      <div className="section">
        <fieldset>
          <legend>Radio</legend>
          <label>
            <input type="radio" name="radio" value="1" onChange={onChange} />1
          </label>

          <label>
            <input type="radio" name="radio" value="2" onChange={onChange} />2
          </label>

          <label>
            <input type="radio" name="radio" value="3" onChange={onChange} />3
          </label>
        </fieldset>

        <fieldset>
          <legend>Checkbox</legend>
          <label>
            <input type="checkbox" name="checkbox1" onChange={onChange} />1
          </label>

          <label>
            <input type="checkbox" name="checkbox2" onChange={onChange} />2
          </label>

          <label>
            <input type="checkbox" name="checkbox3" onChange={onChange} />3
          </label>
        </fieldset>

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

如何为来自react js中的api的动态表单字段设置常规onchange? 的相关文章

随机推荐

  • 在没有数据库的情况下如何使用 Rails/Devise?

    我正在创建一个不使用数据库的 Rails 应用程序 相反 该模型是使用包装遗留系统的 Ruby API 进行管理的 我有一个 Ruby 调用 可以让我验证用户名 密码组合 在这种情况下是否可以使用 Devise 或其他现成的身份验证解决方案
  • 无法设置远程应答 sdp:无法下推传输描述:无法为通道设置 SSL 角色

    我正在使用 webRTC 构建一个支持音频通话的系统 它的工作原理如下 用户AcreateOffer then setLocalDescription与offer 用户BreceiveOffer then setRemoteDescript
  • 安装 mysql-community-server 时出现 GPG 密钥问题

    安装时mysql 社区服务器出现以下错误 Command sudo yum install mysql community server Error warning var cache yum x86 64 2 mysql57 commun
  • 我什么时候应该使用 PHP 会话、浏览器本地存储和 JavaScript 对象参数?

    什么时候适合使用现代基于 AJAX 的应用程序存储数据的多种不同方式 我希望能够为开发人员提供一些具体的指导方针 这是我到目前为止所看到的 而且越来越混乱 PHP 服务器端会话 PHP 会话数据可能是存储基于会话的信息的最古老的方法 我经常
  • 带有聚合数据的堆叠条形图 (ggplot2)

    我在使用 ggplot2 时遇到一些主要问题 尽管这对你来说可能是一个非常简单的问题 但我还无法正确回答 我读过一本 ggplot2 书 并且也在 stackoverflow 上查找 最初有一个由因子变量 国家 和二分变量组成的数据集 不幸
  • Visual Studio 链接器警告 LNK4098

    我有一个 dll 项目 在发布配置中构建该项目时 我收到以下警告 MSVCRT lib cinitexe obj 警告 LNK4098 默认库 msvcrtd lib 与其他库的使用冲突 使用 NODEFAULTLIB 库 这只是一个警告
  • C# linq 支持“反连接”语义吗?

    我用谷歌搜索了一段时间 没有找到直接的反连接语义示例 以 C LINQ 为例 如何做到这一点 An 反连接基本上 一组不包含在另一组数据中的数据可以表示为Linq与一个IEnumerable Except像这样 double numbers
  • pod install 给出与 ruby​​ gems 和 libffi 相关的错误

    我使用react native init 创建一个应用程序 并在iOS 文件夹中运行pod install 但是 我收到以下错误 System Library Frameworks Ruby framework Versions 2 6 u
  • 在使用 Rails 保存之前将字符串转换为日期

    对 Ruby 很陌生 我已经被困了好几个小时了 到处寻找也找不到答案 所以我使用 Rails gem 的引导日期选择器 因为我更改了日期选择器的日期格式 所以它不会存储在数据库中 猜测这是因为 simple form 输入被用作字符串 以避
  • 如何使用 ajax 请求发送 Twitter OAuth 访问令牌?

    我想在使用 OAuth 通过 用 twitter 签名 进行身份验证后加载用户的主页时间线 我正在使用这个库来处理身份验证部分https github com jmathai twitter async https github com j
  • 登录 WordPress 网站时如何显示用户的用户名?

    当用户登录到我的 WordPress 网站时 我希望我的网站标题显示 登录身份 我不知道如何回显当前用户的用户名 这是我得到的代码
  • 改变python shell的背景颜色

    例如 是否可以将 Python Shell 的背景颜色从白色更改为黑色 我确实找到了如何更改文本颜色 但不知道如何更改背景颜色 我是在Windows下运行的 有什么建议么 如果您指的是 IDLE 我通过此链接执行了这个简单的步骤 适用于 u
  • 使用列表理解在列表元素前面添加前缀

    有一个这样的列表 foo spam bar 使用列表理解是否可以获取此列表作为结果 foo ok foo spam ok spam bar ok bar In 67 alist foo spam bar In 70 prefix elt f
  • 如何使用 JavaScript 打开新选项卡/窗口?

    客观的 我想在新选项卡 窗口中打开 URLEXACT与 target blank 相同的方式 Code 我正在使用触发以下 JavaScript 的 PHP 条件 我的问题 window open 是不一样作为 target blank 超
  • 为什么 Java 源文件要进入目录结构?

    假设我正在创建一个包含以下类的 Java 项目 com bharani ClassOne com bharani ClassTwo com bharani helper HelperOne com bharani helper suppor
  • 如何从泽西岛 1.0 迁移到泽西岛 2.0?

    我正在尝试升级到 Jersey 2 0 但遇到了很多麻烦 因为 Jersey 的 groupIds 和artifactIds 已完全更改 并且我在 中找不到迁移计划泽西岛文档 https jersey java net nonav docu
  • Google Play 商店的 RSS 源

    Apple 应用程序商店为您提供 RSS 源 以便将提交到应用程序商店的最新应用程序发送到您最喜欢的源阅读器中 我想知道 google play 商店是否也有 RSS feed 可以让你做同样的事情 Thanks 不 他们不提供任何供第三方
  • 您能否提供一些与在项目中使用的人工智能相关的主题想法? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • scala slick 一对多集合

    我有一个数据库 其中包含具有一对多注册关系的活动 目标是获取所有活动及其注册列表 通过创建带有注册的活动的笛卡尔积 获取该数据所需的所有数据都已存在 但我似乎找不到一个好的方法来将它正确地放入 scala 集合中 让我们输入 Seq Act
  • 如何为来自react js中的api的动态表单字段设置常规onchange?

    我正在使用 React 中的表单 我面临的挑战是每当我为输入字段设置 onchange 处理程序时 它都会更改我拥有的所有输入字段的值 表单输入字段已映射并且来自 api 我想要的是一个通用的更改处理程序来管理所有输入字段 import R