打字稿 - 仅在有值时在开机自检时发送可选字段



我在我的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 语句会起作用,虽然确实如此,但我根本不喜欢它。让我举个例子来说明原因。如果我再添加 2 个可选字段,就像我将要做的那样,以类似的形式,我不想做几个 if 语句来实现这一点。

如果你能想到一种更优雅和干燥的方式来做到这一点,那就太神奇了。谢谢你的时间。

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

在你的代码中定义有效负载后,我会简单地调用此方法,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; 
}

最新更新