gpt4 book ai didi

javascript - TypeScript - 仅当有值时才在 POST 上发送可选字段

转载 作者:行者123 更新时间:2023-12-02 23:27:23 25 4
gpt4 key购买 nike

我在我的 React 应用程序中使用 Formik。我有一个包含 3 个字段的简单表单。我正在用该表格进行两次操作。添加/编辑资源。

我的问题是有一个字段是可选的。这意味着如果它的值为空,我永远不应该发送它。 目前,我发送了一个错误的空字符串。

我正在使用 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 语句就可以工作,虽然它确实有效,但我一点也不喜欢它。让我举个例子来说明原因。如果我添加 2 个可选字段(正如我即将要做的那样),以类似的形式,我不想执行多个 if 语句来实现此目的。

如果你能想出一种更优雅、更干燥的方式来做这件事,那就太棒了。感谢您抽出时间。

最佳答案

看下面的removeEmptyKeys()。它接受一个对象并删除具有空字符串的键。它会改变原始对象,如果您期望差异行为,请相应地更改它。

在定义有效负载后的代码中,我只需调用此方法,removeEmptyKeys(payload)

它还将解决您的 if else 问题。

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;
}

关于javascript - TypeScript - 仅当有值时才在 POST 上发送可选字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56679854/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com