jjzjj

immutability

全部标签

javascript - 我什么时候应该使用 icepick.merge 而不是 lodash.merge

我最近发现需要在我的reducer中进行深入合并。我发现icepick.merge和lodash.merge做这份工作。似乎icepick.merge是一种合并和调用object.freeze的有效方式递归地。在使用Reactreducer(和不可变性)时,什么时候应该使用icepick而不是lodash?在数组和对象上调用object.freeze是一种好习惯吗? 最佳答案 这是一个是否强制执行不变性以及您想要什么级别的控制/抽象的问题。lodashlodash为您提供了以不改变数据结构的方式处理数据结构的工具,但它不会对数据结构

javascript - 对 Immutable.js 列表进行排序和分组

给定以下数据结构:varMyData=[{"id":1,"status":"live",dateCreated:"12:00:0001/02/2016"},{"id":2,"status":"draft",dateCreated:"13:00:0003/12/2015"},{"id":3,"status":"ready",dateCreated:"16:00:0004/09/2016"},{"id":4,"status":"ready",dateCreated:"10:00:0001/10/2016"},{"id":5,"status":"live",dateCreated:"09:0

javascript - 在 React 中使用 $splice(来自 immutability-helper)而不是 filter 从数组中删除项目有什么优势?

我正在使用immutability-helper对状态数据进行CRUD操作,想知道我是否应该始终使用$splice来删除数据,还是可以使用filter(因为它没有破坏性)?例如,假设我有一个对象数组:todos=[{id:1,body:"eat"},{id:2,body:"drink"},{id:3,body:"sleep"},{id:4,body:"run"}]给定一个项目ID,我可以通过两种方式删除它:一个。找到它的index并使用$splice:index=todos.findIndex((t)=>{return(t.id===id)});newtodos=update(todo

javascript - Object.freeze 函数有什么理由吗?

我理解递归深层对象以对其每个子属性执行浅层Object.freeze的意义。卡住函数对象的值有什么意义?由于较高级别的浅卡住,引用已被卡住——是否可以改变函数对象的值本身?例子://LibraryFunction[deepFreezesource](https://github.com/substack/deep-freeze/blob/master/index.js)functiondeepFreeze(o){Object.freeze(o);//shallowfreezethetoplevelObject.getOwnPropertyNames(o).forEach(functio

javascript - 我如何使用 immutable.js 之类的东西在 Redux 中组合多个 combineReducers 函数

我正在使用immutable.JS通过redux-immutablejs管理我的商店。我现在想使用redux-form库,但我在结合reducers时遇到了问题。Redux-immutable提供了一个combineReducers函数,该函数将检查传递给它的所有reducer是否返回不可变对象(immutable对象)。Redux本身提供了一个combineReducers函数,该函数不执行此类检查。Redux-form要求您包含它们的reducer,但我不能使用Reduximmutable的combineReducers这样做,因为它会失败。所以我要做的基本上是像这样组合这两个函数

javascript - 如何从不可变树中获取更改的树,最大限度地重用节点

我有一个像这样的树结构数据:[{id:54,name:123,children:[{id:54,name:123,children:[{id:154,name:1234,children[]...}]}]},{...}]我使用的是Angular2。据我所知,每当输入发生变化并且您的变化检测策略是onPush时,变化检测就会启动。.为了优化树结构更新(例如,在嵌套级别切换节点或更改此类节点的任何属性),我使用了Immutable.Immutable如何帮助我优化更新?我读到Immutable会在数据发生变化时重用旧数据的引用来构造新对象。如何有效地使用不可变数据结构来更新嵌套级别的节点?

javascript - 嵌套的纯函数还是纯函数吗?

根据定义,如果满足以下条件,纯函数就是纯函数:给定相同的输入,将始终返回相同的输出。没有副作用。不依赖于外部状态。所以这是一个纯函数:functionfoo(x){returnx*2;}foo(1)//2foo(2)//4foo(3)//6这也是一个纯函数(在JavaScript上下文中)Math.floor(x);Math.floor(1.1);//1Math.floor(1.2);//1Math.floor(2.2);//2问题:如果我们将这2个纯函数结合起来,它是否仍被视为纯函数?//NestedwithMathlibraryfunctionbar(x){returnMath.f

javascript - 如果直接在 Redux reducer 中修改状态会发生什么?

我正在看这个Reduxtutorial其中正在讨论以下reducer:functionvisibilityFilter(state='SHOW_ALL',action){returnaction.type==='SET_VISIBILITY_FILTER'?action.filter:state}functiontodos(state=[],action){switch(action.type){case'ADD_TODO':returnstate.concat([{text:action.text,completed:false}]);case'TOGGLE_TODO':return

javascript - 为什么 Scala 需要 def 语句?

我是scala的新手,但我有javascript的背景。虽然我看到需要区分val和var(可变和不可变),但我不明白为什么要使用def语句应该永远需要。如果函数是真正的一等公民,就像在javascript中一样,为什么要用def而不是用val声明它们?该设计决策是基于JVM相关约束,还是存在一些我无法理解的底层逻辑? 最佳答案 函数的一个很大的限制是它们不能作为一个值是泛型的。例如deffoo[A](bar:A):Unit那不能表示为一个函数值valfoo:A=>Unit//Ais_not_atypeparameter需要类型参数A

javascript - 在javascript中创建不可变对象(immutable对象)

我有一个从api接收一些数据的例程。我想将这些数据存储在一个对象中,但在那之后我想“锁定”这个对象,并且在那之后不允许对属性或它们的值进行任何更改。那可能吗?(如果可能,只使用ES5)。 最佳答案 如果您希望某个对象不能被修改,您可以使用Object.freeze。.TheObject.freeze()methodfreezesanobject:thatis,preventsnewpropertiesfrombeingaddedtoit;preventsexistingpropertiesfrombeingremoved;andpr