javascript - 如何使用 redux-form onChange 从商店获取更新的值?
问题描述
使用 Redux-form 8.2.2,我想在 FieldArray 中更新金额字段时更新总字段。我的函数在 FieldArray 上循环并对金额值求和,我通过或通过. 但在这两种情况下,值都包含 before ,而不是 after 。我由 FieldArray 调用的组件如下所示:updateTotal()
getFormValues()
formValueSelector
onChange
onChange
import React from "react";
import { connect } from "react-redux";
import { Field, getFormValues, change } from "redux-form";
const RenderTPP = props => {
const { fields, dispatch, values } = props;
const updateTotal = index => {
let tppTotal = 0;
values.tpp.forEach((item, i) => {
tppTotal += parseFloat(item.amount);
});
dispatch(change("myForm", "total", tppTotal));
};
return (
<tr>
<td>
{fields.map((tpp, index) => (
<div key={index}>
<Field
name={`tpp[${index}].amount`}
component="input"
type="text"
onChange={() => updateTotal(index)}
/>
</div>
))}
</td>
<td>
<Field name="total" component="input" type="text" />
</td>
</tr>
);
};
export default connect(state => ({
values: getFormValues("myForm")(state)
}))(RenderTPP);
使用此代码,当 forEach 到达索引时,它会获取先前的 tpp[index].amount 值而不是更新的值。
暂时,我正在使用以下解决方法:
onChange={(event, newValue) => updateTotal(index, newValue)}
代替
onChange={() => updateTotal(index)}
和
const updateTotal = (index, value) => {
let tppTotal = parseFloat(value);
values.tpp.forEach((item, i) => {
if (i != index)
tppTotal += parseFloat(item.amount);
});
dispatch(change("caseDataForm", "total", tppTotal));
};
为updateTotal()
功能。这种解决方法似乎正在完成这项工作,但它不适合我的情况,因为我想updateTotal()
从我的应用程序的其他部分调用。即使这似乎可行,我也更愿意在onChange
被解雇时直接从商店获取更新的值。
解决方案
推荐阅读
- entity-framework-core - 使用 EF Core Fluent API 与两个相同类型的实体映射关系
- slack-api - 当我们的机器人用户/应用程序被添加/邀请到客户端松弛通道时,我应该听哪个事件
- swift - 我可以跳过填写函数的默认值吗?
- jquery - 通过 Aurelia 中的 HTML DIV 基础捕获 KeyCode 和触发事件
- excel - Wonderware 历史标签
- sql - 影响表的活动对象
- c# - 从使用 GemBox 正确格式化的文本文件中获取 PDF 文档时遇到问题
- vue.js - 如何在vue中查找对象长度
- javascript - 为什么 console.log 的位置会导致循环解构数组崩溃?
- javascript - “member.guild.username”在消息中显示为“未定义”