redux - 按名称而不是索引从 redux 表单字段数组中删除项目
问题描述
Redux Form
有FieldArray
字段:
https://redux-form.com/6.0.0-rc.3/docs/api/fieldarray.md/
我正在尝试从中删除多个项目,但该remove()
方法仅适用于单个删除,可能是因为每次fields
获取一个较小的项目并且我确定的索引大于fields
数组时:
<MultiSelect
placeholder="Delete project group"
onChange={(v) => {
const diff = difference(addedGroups, v)
if (!isEmpty(diff)) {
const groupToDelete = diff[0]
forEach(projectsByGroup[groupToDelete], p => removeElement(addedProjects.indexOf(p)))
deleteGroup(groupToDelete)
}}
options={projectGroupNames}
value={addedGroups}
inline
/>
removeElement
功能在哪里fields.remove
FieldArray
。如何选择性地正确删除多个项目FieldArray
?
更新:
我也尝试change
在我的减速器中使用这样的:
import { change } from 'redux-form'
export const deleteVariantSearchProjectGroup = (projectGroupGuid) => {
return (dispatch, getState) => {
const state = getState()
const projectsInGroup = state.projectsByProjectGroup[projectGroupGuid]
const allProjectFields = getProjectsFamiliesFieldInput(state)
const remainingProjectFields = allProjectFields.filter(projectField => !projectsInGroup.includes(projectField.projectGuid))
change(SEARCH_FORM_NAME, 'projectFamilies', remainingProjectFields)
dispatch({ type: UPDATE_VARIANT_SEARCH_ADDED_GROUPS, newValue: without(getState().variantSearchAddedProjectGroups, projectGroupGuid) })
}
}
我正确地得到了一个数组remainingProjectFields
,但change(SEARCH_FORM_NAME, 'projectFamilies', remainingProjectFields)
没有做任何事情。
解决方案
我实际上无法找到一种方法来逐个删除字段,fields.remove
但最终我通过使用 reducer 并使用方法更新Redux Form
状态来解决它:change
import { change } from 'redux-form'
export const deleteVariantSearchProjectGroup = (projectGroupGuid) => {
return (dispatch, getState) => {
const state = getState()
const projectsInGroup = state.projectsByProjectGroup[projectGroupGuid]
const allProjectFields = getProjectsFamiliesFieldInput(state)
const remainingProjectFields = allProjectFields.filter(projectField => !projectsInGroup.includes(projectField.projectGuid))
dispatch(change(SEARCH_FORM_NAME, 'projectFamilies', remainingProjectFields))
dispatch({ type: UPDATE_VARIANT_SEARCH_ADDED_GROUPS, newValue: without(getState().variantSearchAddedProjectGroups, projectGroupGuid) })
}
}
和deleteVariantSearchProjectGroup
=deleteGroup
在问题的第一个jsx
代码片段中。
推荐阅读
- algorithm - 如何测量执行汇编代码所需的“时间单位”
- node.js - nodejs - 是否可以运行位于路径环境变量中提到的文件夹中的节点脚本而不给出该文件的绝对路径?
- python - 在 Python 中展平字典以使每个键和列表元素配对的正确方法是什么?
- java - 如何根据用户输入打印多个整数数组?
- amazon-cloudformation - CloudFormation 模板接受来自外部文件的参数
- python - 如何使用破折号html核心组件按钮执行def函数
- python-2.7 - 如何在 Python 2.7 中查找文件夹的大小?- 一个错误
- amazon-rds - aws rds start-export-task 返回内部错误
- java - 键盘打开时如何防止底部视图向上推
- c# - 如何在 C# 中从 SSAS 表格中查询数据?