首页 > 其他分享 >为什么不能这样使用 Object.assign(state, { visibilityFilter: action.filter })

为什么不能这样使用 Object.assign(state, { visibilityFilter: action.filter })

时间:2024-01-29 17:01:07浏览次数:30  
标签:Object filter state action visibilityFilter assign

为什么不能这样使用 Object.assign(state, { visibilityFilter: action.filter })?

在Redux的reducer中,直接使用Object.assign(state, { visibilityFilter: action.filter })来修改状态是不推荐的做法。原因如下:

  1. 纯函数原则
    Redux要求reducer必须是一个纯函数,即给定相同的输入(state和action),总是产生相同的输出,并且没有副作用。Object.assign()方法会直接修改原对象state,而不是创建新的对象,这违反了纯函数的原则。

  2. 不可变性原则
    Redux推崇不可变数据结构。每次触发action时,都应该返回一个新的state对象,而非改变原有的state。直接修改state可能会导致组件无法正确地追踪到state的变化,进而影响UI的更新和其他依赖于state的状态管理逻辑。

正确的做法是利用ES6的展开运算符(...)或者Object.assign()来创建一个新的对象,然后再将修改的部分合并进去:

const reducer = (state = initialState, action) => {
  switch (action.type) {
    case 'SET_VISIBILITY_FILTER':
      return {
        ...state,
        visibilityFilter: action.filter,
      };
    // 其他case处理...
    default:
      return state;
  }
};

这样可以确保新生成的对象与旧的state对象不同,同时遵循了Redux中的纯函数和不可变性的原则。

https://www.redux.org.cn/docs/basics/Reducers.html

标签:Object,filter,state,action,visibilityFilter,assign
From: https://www.cnblogs.com/longmo666/p/17994882

相关文章

  • React 使用的Redux, action type 抽离成常量好还是直接写死好
    React使用的Redux,actiontype抽离成常量好还是直接写死好?在React与Redux结合进行状态管理时,将actiontype抽离成常量是一种更推荐的做法,而不是直接写死在代码中。原因如下:减少错误:如果直接在actioncreator或reducer中硬编码字符串类型的actiontype,容易因拼写错误或大......
  • 关于ufw 报错ip6tables v1.6.1: can't initialize ip6tables table `filter': Table d
    背景在ubuntuarm版本上安装ufw,设置规则时报错发现报错ip6tablesv1.6.1:can'tinitializeip6tablestable`filter':Tabledoesnotexist(doyouneedtoinsmod?)Perhapsip6tablesoryourkernelneedstobeupgraded.解决办法一.升级ip6tables二.禁用i......
  • .Net Framework:MinIO objectname异常
     minio-dotnetgithub地址:github.com/minio/minio-dotnet1.异常现象:在调用PutObjectAsync/FileExist/FGetObject等方法操作MinIO时,objectname同时包含汉字、英文括号,MinIO内部throw异常:AuthorizationException:Therequestsignaturewecalculateddoesnotmatchthes......
  • 事务提交之后再执行某些操作 → 引发对 TransactionSynchronizationManager 的探究
    开心一刻昨晚,小妹跟我妈聊天小妹:妈,跟你商量个事,我想换车,资助我点呀妈:哎呀,你那分扣的攒一堆都够考清华的,还换车资助点,有车开就不错了小妹:你要是这么逼我,别说哪天我去学人家傍大款啊妈:哎呀妈,你脸上那褶子比你人生规划都清晰,咋地,大款缺地图呀,找你?小妹:......
  • 补充:基于项目的协同过滤推荐算法(Item-Based Collaborative Filtering Recommendation
    前言继续上篇博客,继续读论文。想看上篇论文的同学可以点击这里相关工作Inthissectionwebrieflypresentsomeoftheresearchliteraturerelatedtocollaborativefiltering,recommendersystems,dataminingandpersonalization.在本节中,我们简要介绍了一些与协同......
  • 2024最新分享FabFilter Total bundle 2023 for Mac 直装版
    FabFilter音频插件工具集,共包含14款音频插件。这14款插件分别是均衡器、混响、压缩器、多频段动态、限幅器、扩展器、创意多频带失真、延迟、滤波器和合成器。通过这些插件,用户可以满足制作混音和母带的需求。FabFilterTotalbundle2023forMac直装版FabFilterTotalBundl......
  • css背景图片实现object-fit的效果
     object-fit是一个用于控制替换元素(如<img>或<video>)内容在其容器内布局和缩放的CSS属性。它的作用是调整替换元素的尺寸和位置,使其适应容器,并保持其纵横比例。然而,object-fit属性本身并不直接适用于背景图片。如果你想在背景图片上应用object-fit效果,可以使用background-size......
  • Objective-C杂谈【1】
    ObjC(Objective-C)进入人们的视野,主要源自MacOSX的Cocoa。人们即使是开发着更多关注的也是Cocoa靓丽的外表,对支撑起Cocoa的ObjC确一直缺乏深入了解。ObjC给人深刻印象的无异于它与传统基于“.”的面向对象语言语法的完全不同的调用或者消息传递语法。例:[objectdoSomethingWithPa......
  • MetaGPT day04 MetaGPT ActionNode
    ActionNode说明文档导读#什么是ActionNode?1.ActionNode是Action的通用化抽象2.ActionNode是SOP的最小单元#ActionNode是Action的通用化抽象:反推可得知Action不够通用化?也就是说ActionNode的粒度比action更细? Action-粒度更细->ActionNode#Actio......
  • filter拦截路径
     /*  拦截所有/login  拦截具体login路径/emps/* 拦截emps下的所有路径 filter过滤器链中执行的顺序是你的包里面的从上到下的顺序依次执行 如图的话,先进入AbcFilter过滤器,再进入DemoFilter过滤器  过滤器规则 ......