我在React应用程序中使用Formik。我有一个简单的表格,包含3个字段。我正在使用该表格进行2次操作。添加/编辑资源。
我的问题是一个字段是可选的。意味着如果它的值为null,则永远不要发送它。 当前,我发送了一个错误的空字符串。
我正在使用TS-React-Formik,这是handleSubmit
方法的代码:
interface IValues extends FormikValues {
name: string;
owner?: string;
groups: string[];
}
interface CreateAndEditProps {
doSubmit(service: object, values: object): AxiosResponse<string>;
onSave(values: IValues): void;
}
handleSubmit = (values: FormikValues, formikActions:FormikActions<IValues>) => {
const { doSubmit, onSave, isEditMode } = this.props;
const { setSubmitting } = formikActions;
const payload: IValues = {
name: values.name,
groups: values.groups,
owner: values.owner
};
const submitAction = isEditMode ? update : create;
return doSubmit(submitAction, payload)
.then(() => {
setSubmitting(false);
onSave(payload);
})
.catch(() => {
setSubmitting(false);
});
};
我认为一个简单的if语句会起作用,尽管起作用,但我一点都不喜欢它。让我举一个为什么的例子。如果我以类似的形式添加了两个可选字段,就像我将要做的那样,我不想做几个if语句来实现这一点。
如果您想到一种更优雅,更干燥的方式,那就太好了。谢谢您的宝贵时间。
答案 0 :(得分:1)
查看下面的removeEmptyKeys()。 它接受一个Object并删除具有空字符串的键。它会变异原始Object,如果您希望获得差异行为,请相应地对其进行更改。
在定义有效负载后的代码中,我将简单地称为 removeEmptyKeys(payload)
它还将解决您的其他问题。
removeEmptyKeys = (item)=>{
Object.keys(item).map((key)=>{
if(payload[key]===""){
delete payload[key]}
})}
var payload = {
one : "one",
two : "",
three : "three"
}
removeEmptyKeys(payload)
如果发现有用,请标记为已解决。
输入您的代码:
const removeEmptyKeys = (values: IValues): any => {
Object.keys(values).map((key) => {
if (payload && payload[key] === "")
{ delete payload[key] } })
return values;
}