React 中的条件对象名称

用户3642173

我有一个简单/愚蠢的函数,它根据用户与之交互的元素来改变我的状态。我的问题是我为每个组复制了几乎相同的代码。有什么办法可以重构这个吗?

  handleRequestDeleteChip = (data, group) => {
    // NEED REFACTORING
    if (group === "client") {
      const updatedSelectedClients = removeItem(this.state.currentJob.selectedClients, data.id);
      const updatedJobStatus = {
        ...this.state.currentJob,
        selectedClients: updatedSelectedClients
      };
      this.setState({currentJob: updatedJobStatus});
    } else if (group === "product") {
      const updatedSelectedProducts = removeItem(this.state.currentJob.selectedProducts, data.id);
      const updatedJobStatus = {
        ...this.state.currentJob,
        selectedProducts: updatedSelectedProducts
      };
      this.setState({currentJob: updatedJobStatus});
    } else if (group === "upload") {
      const updatedSelectedUplods = removeItem(this.state.currentJob.selectedUploads, data.id);
      const updatedJobStatus = {
        ...this.state.currentJob,
        selectedUploads: updatedSelectedUplods
      };
      this.setState({currentJob: updatedJobStatus});
    }
  };
或德罗里

由于“选定”项目与组有 1 对 1 的关系,因此您可以创建一个Map(或字典对象),根据组为您提供正确的项目类型。其余的只是使用项目名称:

注意:地图是静态的,所以它可以移动到方法之外。这样就无需在调用该方法时重新创建它。

const itemToChange = new Map([['client', 'selectedClients'], ['product', 'selectedProducts'], ['upload', 'selectedUploads']]); // external map of options

handleRequestDeleteChip = (data, group) => {    
    const selected = itemToChange.get(group); // get the item by group

    if(!selected) { // if no selected for the group
        // handle by returning, throwing error, fallback, etc...
    }

    const updatedSelected = removeItem(this.state.currentJob[selected], data.id); // use brackets notation to get the item

    this.setState({
        ...this.state.currentJob,
        [selected]: updatedSelected // use computerd properties to set the correct type
    });
};

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在React中为每个对象渲染json对象名称/描述

来自分类Dev

输出对象名称不是使用jsx语法的React

来自分类Dev

从函数中获取对象名称

来自分类Dev

JMX中的MBean嵌套对象名称

来自分类Dev

AS3中的动态对象名称

来自分类Dev

在jQuery中获取对象名称?

来自分类Dev

警告中缺少模拟对象名称

来自分类Dev

C中的结构对象名称指针

来自分类Dev

在Python中输入对象名称空间

来自分类Dev

从函数中获取对象名称

来自分类Dev

从数组中获取对象名称

来自分类Dev

检索对象名称

来自分类Dev

获取对象名称

来自分类Dev

从再现对象名称的列表中调用对象

来自分类Dev

从对象名称向量中列出许多对象

来自分类Dev

如何在 JavaScript 中获取对象的对象名称

来自分类Dev

将对象名称与对象变量中的数字组合

来自分类Dev

如何在R中创建对象名称

来自分类Dev

在Java中的arrayList中生成动态对象名称

来自分类Dev

对象名称中不允许使用``/''字符

来自分类Dev

从JSON中的不同嵌套级别提取对象名称

来自分类Dev

是否可以在C#中缩短对象名称?

来自分类Dev

如何在Python中打印我的对象名称

来自分类Dev

在Java中创建对象名称时如何获取?

来自分类Dev

循环以基于r中的列表分配新对象名称

来自分类Dev

JavaScript中对象名称-值的冗余代码

来自分类Dev

如何在NodeJ中创建动态对象名称

来自分类Dev

是否可以在C#中缩短对象名称?

来自分类Dev

在Lua中,您可以从'self'获得对象名称吗?