如何使用 redux 存储变量更新 FieldArray 元素

2023-12-04

  • 我将 redux-form 与 FieldArray 一起使用。默认情况下,数组中将有 1 个元素,并且它是从 JSON 填充的。我最多可以添加 3 个 FieldArray 组件中的元素。

  • 在下面的代码中,“elementList” 属性来自 JSON,而且我还存储了名为 作为“元素”和“元素列表”。我用 elementList 初始化这些存储变量 首先从 JSON 开始,然后在“添加”时不断更新存储变量 单击“元素”。我可以看到商店变量正在更新 正确但在屏幕上 Field 数组元素未更新。这可能是因为 FieldArray 中的名称属性“elementList”可能引用 JSON 元素。

    如果我可以在名称属性中引用存储变量“elementList”或“elements”,是否可能 'FieldArray' 的。请指教。

主页

  <div>
      <FieldArray name="elementList" component={Elements}
                  props={this.props}/>
      <button type="button" className="btn btn-primary"
              onClick={event => this.addElement(elementDTO)}>Add Element
      </button>
      <br/>
  </div>
  
  addElement(elementDTO){
        if(this.props.elements && this.props.elements!=undefined && this.props.elements.length >= 3){
            return;
        }
        this.props.addReqElement(this.props.elements);
    }

字段数组页面

const elements= ({props, meta: {error, submitFailed}}) => {
    const {fields} = props;
    return (
    {fields.map((element, index) => (
     <div> 
            //Field definitions
     </div>
))}

谢谢

更新: 从 Redux Action 和Reducer 添加方法

 export function addReqElement(childList) {
         let state = store.getState()
         let newChild= 
            state.requestReducer.DTOobj.requestDoc;  //this is an empty element coming from backend with few properties and adding rest of the //proerties as below to create a new child 
        newChild.prop1 = null
        newChild.prop2 = null
        childList.push(newChild)
        return (dispatch) => {
            dispatch(setDoc(childList));
        }
    }
    

export function setDoc(payload) {
    return {
        type: ADD_DOC,
        payload: payload
    }
}

更新2:我尝试删除push并使用spread操作符,但它不起作用。我也有内部数组,因为我使用不同的策略,所以它正在工作。我采用拉父数组,它是索引并使用新的内部数组更新父数组。它可以工作,但父数组我不知道应该如何使其工作。我尝试将主数组设置为表单道具并通过分派操作来渲染整页,但它不起作用。请问lz有什么建议吗?

从主数组页面:

render() {
   const {fields, parentArrayFromStore} = this.props;
    return (
       <div className="col-sm-12">
          {fields.map((doc, index) => (
           <div key={index}>
            <div className="col-sm-12">
              <FieldArray name={`${doc}.innerArrayList`} component={CustomInnerArrayComponent}/>
            </div>
            <div className="row">
               <div className="col-sm-4">
                  <button type="button" className="btn btn-primary"
                          onClick={event => this.addInnerArray(index, parentArrayFromStore ,fields.get(index).innerArrayList)}>Add Printer
                   </button>
                </div>
            </div>
        </div>
    ))}
    </div>)
            }
                
        

在行动类

export function addInnerArray(index, parentArrayFromStore, innerArrayList) {
    let newInnerItem= {};
    newInnerItem.prop1 = null
    newInnerItem.prop2 = null
   
    innerArrayList.push(newInnerItem)
    parentArrayFromStore[index].innerArrayList = innerArrayList;

    return (dispatch) => {
        dispatch(setParentArray(parentArrayFromStore));
    }
}

export function setParentArray(payload) {
    return {
        type: ADD_DOC,
        payload: payload
    }
}

您好,问题出在函数中的 Push 语句,当更新构造函数或化简器中的状态时,使用 concat 或 spread 运算符[...]> 我已经做了一个样品here请检查

onAddItem() {
        let list = [...this.state.items, {text:`Check 1`}];
        this.setState({items:list});
}

在你的情况下,你可以执行以下操作

let arr = [...childList, newChild]

然后发送 arr

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

如何使用 redux 存储变量更新 FieldArray 元素 的相关文章

随机推荐

  • 如何用SQL-Server 2000查询层次信息?

    我有一张桌子Folders包含有关文件夹的分层信息 FolderID FolderName ParentID 1 Folder1 0 2 Folder2 1 3 Folder3 2 4 Folder4 3 For Folder4我想获取以下
  • Android MapView 无法删除标记

    我正在使用 locationManager 和 ItemizedOverlay 来绘制 我的位置 标记 问题是当触发 onLocationChanged 时 我正在绘制新标记 而不是最后一个移动到新位置的标记 这是我的 onLocation
  • 如何正确清理 Excel 互操作对象?

    我在 C 中使用 Excel 互操作 ApplicationClass 并将以下代码放入我的finally子句中 while System Runtime InteropServices Marshal ReleaseComObject e
  • jQuery 按需加载图像

    我正在尝试按需加载图像 以防止下载不需要的图像 我正在使用 jQuery 到目前为止 这就是我想出的 region image attr src images e key jpg load function this fadeIn e ke
  • 如何避免在接口中重复使用相同的实现代码?

    首先 我为 又一个界面问题 道歉 不过 我认为这个问题可能值得一问 因为这是一个奇怪的问题 我正在使用的项目使用 Actionscript 3 但这更多是一个一般的 OOP 问题 情况是这样的 我有一个已经从基类继承的类 它是电子游戏中的一
  • Spring Data JDBC:DataRetrievalFailureException:无法将 [oracle.sql.ROWID] 转换为 [java.lang.Number]

    我是 Spring Data JDBC 的新手 我正在努力创建一个简单的 Dto 并将其持久保存在数据库上 我正在使用 Spring Boot 2 1 1 RELEASE 和 Oracle 12 数据库 UserDto Table valu
  • 如何使 std::istream_iterator 只读直到行尾?

    有以下代码 std vector
  • 如何保持打开的 xml 文档的样式

    我使用开放 XML Microsoft Word docx 作为文件模板来自动生成其他文档 在模板文档中 我定义了内容控件 并编写了代码来替换这些内容控件中的内容 内容被替换并生成文档 但我正在努力保持风格 在Word中 在检查内容控件的属
  • 将一个 div 放在两个垂直 div 旁边

    我试图让一个 div 在其容器中的高度为 100 其高度为 50 并在其旁边有两个 div 每个 div 的高度为 50 这是我的意思的一个例子 我还想在所有 div 之间留有边距 如上图所示 到目前为止 这是我的代码 div style
  • 使用正则表达式来匹配具有特定ID的div块[重复]

    这个问题在这里已经有答案了 我正在尝试匹配具有特定 id 的 div 块 这是我的正则表达式代码
  • 两个同一时间谷歌表格的价值差异[重复]

    这个问题在这里已经有答案了 为什么两个相同时间的值不同 因此无法使用vlookup 注意 时间取自两个不同的来源 一个是从网站生成的 CSV 文件 另一个是手动输入的 Example 时间值 上午 10 00 0 4166666666666
  • 将 PHPExcel 与 Composer 和 Symfony2.2 结合使用

    我在SO上找到了这个 如何在 Symfony 2 中正确使用 PHPExcel 这可行 但我想与作曲家一起使用它 我已经解决的第一部分 为特殊标签加载 PHPExcel 最后一个稳定版本 我不知道如何使用以下语法获取标签 repositor
  • 枚举中的数字常量 (c#)

    我正在 SharePoint Web 部件中创建此选择框 并且需要包含当前版本的下拉菜单 因此我需要使用枚举 public enum SelectVersionEnum 2010 2007 好吧 你可以看到它在哪里中断 有没有办法在枚举中使
  • 为什么 XmlDocument Validate 事件处理程序没有被命中?

    我有这个代码 Load the document XmlDocument xmlDocument new XmlDocument use the stream and have it close when it is finished us
  • C++ 可变参数模板和求值顺序

    我有以下代码 lib hxx template
  • Ado.net (2.0+) 连接池是在应用程序域之前还是每个进程

    我试图理解汇集理论 ADO NET 和 SQL Server 之间的交互要好得多 但尚未找到明确的答案 我一直假设每个进程 但我突然想到它可能是每个应用程序域 任何深入的参考文献也将不胜感激 连接池是一个复杂的野兽 因为它们是在几个不同的范
  • 如何使用 Node 中的 Promises 一次并行异步多个请求

    数组和循环 但我希望能够并行运行所有它们 因为我不想一个接一个地运行 我基本上想将所有端点调用状态代码 正文和时间存储为数组 并将它们作为结果返回 无论端点中是否存在错误 我正在使用 Bluebird 如何利用它的功能来解决这个问题 您可以
  • 每个子图的旋转轴文本

    我正在尝试绘制散点矩阵 我正在建立这个线程中给出的示例matplotlib中有制作散点图矩阵的函数吗 在这里 我只是稍微修改了代码 使轴对所有子图都可见 修改后的代码如下 import itertools import numpy as n
  • 如何将 c# 的 byte[] 转换为 java byte[]

    我有这段 C 代码 byte t 6 250 215 但在Java中是 byte t 6 6 41 如何解决这个问题呢 如何解决这个问题呢 第一个是关于java如何表示数据类型 byte 字节数据类型是 8 位有符号二进制补码整数 它的最小
  • 如何使用 redux 存储变量更新 FieldArray 元素

    我将 redux form 与 FieldArray 一起使用 默认情况下 数组中将有 1 个元素 并且它是从 JSON 填充的 我最多可以添加 3 个 FieldArray 组件中的元素 在下面的代码中 elementList 属性来自