当前位置: 首页 > 面试题库 >

在React / Redux中使用Object.assign或Spread运算符?哪个更好的做法

蒋航
2023-03-14
问题内容

我对使用Object.assignReact和Redux 有一些困惑。

我读了这篇文章。

它说并非所有浏览器都支持ES6,但我已经开始使用它。

我有两个问题:

  1. 继续下去是正确的决定Object.assign吗?
  2. 有什么选择?

我的密码

export const selectDiameter = (scaleData, size) => {
  return {
    type: SELECT_DIAMETER,
    payload: Object.assign({}, scaleData, {
         diameter: Object.assign({}, scaleData.diameter, {
             selected_tube_diameter: size,
             is_clicked: true,
             audio: Object.assign({}, scaleData.diameter.audio, {
               is_played: true
             })
         })
      })
   }
}

以上代码的替代方法是什么?


问题答案:

Redux文档建议您使用传播算子方法,而不要使用 Object.assign

根据文档:

一种替代html" target="_blank">方法是使用为下一版本的JavaScript提议的对象传播语法,该语法使您可以使用传播(…)运算符以更简洁的方式将可枚举的属性从一个对象复制到另一个对象。对象扩展运算符在概念上类似于ES6阵列扩展运算符

编写复杂对象时,使用对象传播语法的优势变得更加明显

使用Spread运算符语法

export const selectDiameter = (scaleData,size) => {
  return {
    type: SELECT_DIAMETER,
    payload: {...scaleData, 
                 diameter: {
                          ...scaleData.diameter,
                           selectedTube: size,
                           isClicked: true,
                           audio: {
                                ...scaleData.diameter.audio,
                                isPlayed: true
                           }
                 }

             }
   }
}

它仍然使用ES6。有关为相同代码配置代码的更多信息,请参见
Redux文档


但是,当您处理嵌套数据时。我更喜欢使用immutability-helpers

对于您的代码,它将像

import update from 'immutability-helpers';

export const selectDiameter = (scaleData,size) => {
  return {
    type: SELECT_DIAMETER,
    payload: update(scaleData, {
         diameter: {
            selectedTube: { $set: size},
            isClicked: { $set: true},
            audio: {
                isPlayed: {$set: true}
            }
         }
    })
   }
}


 类似资料:
  • 问题内容: 使用哪种更好或更方便: 要么 问题答案: 您是否完全需要类型属性?如果您使用的是HTML5,则不会。否则,是的。HTML 4.01和XHTML 1.0 根据需要指定属性,而HTML5具有可选属性,默认为。HTML5现在得到了广泛的实现,因此,如果您使用HTML5doctype,则是有效且不错的选择。 至于type属性中应该包含的内容,2006年注册的MIME类型旨在替代所有主要浏览器(

  • 实际上,我是一个初学者的根据我的知识,我有两个选项来安装反应本机,即反应本机CLI和世博CLI。我对React Native应用程序开发的安装和使用哪个更适合初学者以及哪个对初学者有更多的支持感到困惑

  • 问题内容: 两种(在语义上等效)哪种方法更适合测试不平等现象? (感叹号和等号) (一起小于和大于V形符号) MySQL文档清楚地表明它们之间没有区别,但是有些人似乎只喜欢一种或另一种方式。也许这只是vi与emacs争论的另一场毫无意义的事情,但是当其他人正在阅读您的代码(以及您的查询)时,保持某些一致性很有用。 看起来很像是一个未充分使用的运算符,但由于两者几乎相反(明显的情况除外),因此乍看之

  • 我是一个初学者,我正在开发一个Android应用程序,它会在一定的延迟(以天为单位)后继续向用户发送短信。我希望用户一旦注册就应该收到短信,不管他是否登录。短信内容和手机号码是从database.So获取的,经过研究,我发现了两种方法。 > 预定执行人服务 报警管理器 问题是,当手机关闭或重新启动时,警报管理器将关闭。预定的礼宾服务也是如此吗?使用执行器服务时,我应该在线程池中使用多少个线程?

  • 当开发一个需要我唯一识别手机用户的应用程序时。我希望得到一些关于使用手机UDID还是IMEI的建议。使用这两种方法有什么优点/缺点吗。如有任何意见,将不胜感激

  • 本文向大家介绍C#中哪个更好的System.String或System.Text.StringBuilder类?,包括了C#中哪个更好的System.String或System.Text.StringBuilder类?的使用技巧和注意事项,需要的朋友参考一下 主要区别是StringBuilder是Mutable,而String是Immutable。 字符串是不可变的,不可变是指如果您创建字符串对象