('a').set('b', 2); 用 fromJS 把 JS 对象转成 immutable 内部的数据结构,然后 get a,再 set b 的值。...你还可以用 toJS 再把 immutable 数据结构转成 JS 对象: 再来回顾下 immutable 的 api:fromJS、toJS、set、get、setIn、getIn 这些都很容易理解...(注意这里的 Map、Set 不是 JS 里的那个,而是 immutable 实现的) 这些 immutable 数据结构一般不大需要手动创建,直接用 fromJS 让 immutable 去创建就行。...有的同学可能会问,为什么要 sate.a 用 fromJS 转成 immutable,而不是整个 state 呢?...此外,immutable 在 redux 里也很有用的: 用 immutable 的话是这样写: const initialState = fromJS({}) function reducer(state
定义 Immutable --- 不可变 final --- java final关键字 关于final关键字有一点思考。就像最近在思考的另一句话:不能听命自己者,必将受制于他人!...也就是标题的Immutable? 不可变对象的好处。容易解释,状态在一经创建就无法修改,我们可以在创建的时候顺便校验下,那么该对象在其生命周期内都是合法的属性。...但是为何scala的作者如此设计,也是为了考虑immutable的重要性吧,毕竟scala也可以成为java++的。虽然用得少,不代表不厉害,scala语言太过于灵活可能也是使用者相对较少的原因之一。
this.modifyRoom.bind(this); this.state = { // roomList: this.generateRooms() roomList: fromJS...is(formJS(this.props), fromJS(nextProps)) || !...is(fromJS(this.state), fromJS(nextState)); } 将数据源用Immutable初始化之后,之后再进行的数据改变都只要遵守ImmutableJS的相关API即可,就可以保证数据的纯净性...redux-src/redux/reducers/index.js import { fromJS } from 'immutable'; import { combineReducers } from.../actions'; // ... generateRooms() const initialState = fromJS({ roomList: generateRooms(), newRoom
import Immutable from "immutable"; // 可以查看到 immutable 内部提供的函数 console.log(Immutable); 使用 fromJS 方法可以将纯...例如下面的 js 对象,使用 fromJS 包装,然后使用 get 方法可以获取对象的属性值,然后使用 set 方法改变原来的值并返回新的 对象。...import {fromJS} from "immutable"; // 使用 fromJS 包装 var person = fromJS({ name: "Jack", age: 18...比如上面的 newPerson 使用 toJS 后可以又变回原生 js 对象: import {fromJS} from "immutable"; // ... console.log(newPerson.toJS...const {fromJS} = require("immutable"); var obj = fromJS({ a: 123, b: { name: "Jack",
加入immutable 加入这个看个人意愿,加入之后必定会造成一定的学习以及开发成本,但是对redux来说,运用这个库是再好不过的了,具体表现在数据的不可变性,即每次的数据都会是一个新的,不会在原始引用的数据上进行重新操作...} from 'immutable'; import { bindActionCreators } from 'redux'; import { connect } from 'react-redux...is(fromJS(this.props), fromJS(nextProps)) || !...is(fromJS(this.state), fromJS(nextState)); } render() { return <MyComponent...} from 'immutable'; import { handleActions } from 'redux-actions'; import { LOAD_STATUS } from '..
Immutable.is(a, c)); // true console.log(Immutable.is(d, e)); // false console.log(Immutable.is(f,...(Immutable.hash(seed3)); // 2 console.log(Immutable.hash(seed4)); // 3 console.log(Immutable.hash(seed5...filter 1 // map 1 // 1 console.log(oddSquares.get(0)); // 调用发现,filter中只执行一次,map中也执行了一次 3.8 其他 3.8.1 fromJS...fromJS(val[, callback(key, value, path)]) fromJS有两个参数,其中回调函数可选,作用是将原始值类型转换为Immutable的集合。.../lib/immutable.js'); let obj = { a: { b: [10, 20, 30] }, c: 40 }; let iObj = Immutable.fromJS(obj,
于是这里就引入了一个强大的第三方库 ——immutable.js,先举个例子示范一下: (首先要通过npm install immutable 安装immutable的依赖包哦) const { fromJS...} = require('immutable') let obj1 = fromJS({name:'李达康'}),obj2; obj2 = obj1;//obj2取得与obj1相同的值,但两个引用指向不同的对象...immuutable提供的API fromJS(obj)把传入的obj封装成immutable对象,在赋值给新对象时传递的只有本身的值而不是指向内存的地址。...obj.set(属性名,属性值)给obj增加或修改属性,但obj本身并不变化,只返回修改后的对象 obj.get(属性名)从immutable对象中取得属性值 1优点:深拷贝/浅拷贝本身是很耗内存,而immutable...from 'react' const { fromJS } = require('immutable') class Son extends React.Component{ shouldComponentUpdate
每当对Immutable对象进行修改的时候,就会返回一个新的Immutable对象,以此来保证数据的不可变 有人说 Immutable 可以给 React 应用带来数十倍的提升,也有人说 Immutable...Immutable 可以很好地解决这些问题 什么是IMMUTABLE DATA Immutable Data 就是一旦创建,就不能再被更改的数据。...用的最多就是List和Map,所以在这里主要介绍这两种数据类型的API 1. fromJS() 作用 : 将一个js数据转换为Immutable类型的数据 用法 : fromJS(value, converter...const obj = Immutable.fromJS({a:'123',b:'234'},function (key, value, path) { console.log(key, value...后 import Immutable from 'immutable'; foo = Immutable.fromJS({a: {b: 1}}); bar = foo.setIn(['a', 'b']
本文首发于政采云前端团队博客:15分钟学会Immutable https://www.zoo.team/article/learn-about-immutable image.png 1....什么是 Immutable ? Immutable Data 就是一旦创建,就不能再被更改的数据。对 Immutable 对象的任何修改或添加删除操作都会返回一个新的 Immutable 对象。...Immutable 有什么优点?.../immutable-js/docs/#/?...fileGuid=tCVw8Y6Cv8J3KYHw) Immutable官方文档 (https://immutable-js.github.io/immutable-js/docs/#/?
Range Sum Query - Immutable 题目描述 Given an integer array nums, find the sum of the elements between indices
为什么要用immutable对象?...immutable对象有以下的优点: 对不可靠的客户代码库来说,它使用安全,可以在未受信任的类库中安全的使用这些对象 线程安全的:immutable对象在多线程下安全,没有竞态条件 不需要支持可变性,... System.Collections.Immutable.ImmutableDictionary System.Collections.Immutable.ImmutableDictionary... System.Collections.Immutable.ImmutableList System.Collections.Immutable.ImmutableList System.Collections.Immutable.ImmutableQueue...System.Collections.Immutable.ImmutableSortedSet System.Collections.Immutable.ImmutableStack System.Collections.Immutable.ImmutableStack
下一个项目中打算在redux中使用Immutable.js。在此对一些API进行简单记录。日后用到其它也会慢慢补充 Immutable的中文翻译就是不可变,所以。...对Immutable对象每一个操作都是返回的一个新的对象。...寒假的时候再看看这个库的源码吧, 文档地址 Immutable中的一些数据结构 Map 无序键值对(有点像js的Object) 设置 set (对应delete、deleteAll)/ setIn
线程不安全的原因是共享了变量且对该共享变量的操作存在原子性、可见性等问题,因此一种解决思路就是构造不可变的对象,没有修改操作也就不存在并发竞争,自然也不需要额外的锁,同步等操作,这种设计叫做immutable...object模式,本文主要理解这种模式,并学习如何实现一个较好的immutable类。...immutable设计原则 一个比较严格的immutable模式,有如下几种设计原则(来自Java多线程编程实战指南) 类本身是final修饰,防止其子类改变其定义的行为 所有字段都是用final修饰,...immutable设计陷阱 不可变类经常会遇到以下陷阱,他是不可变的吗?...比如系统中有表示用户一次下单购买商品数量的类Quantity,那么考虑到用户一次性购买数量很少大于10,因此这个类设计成immutable并且应用享元模式就可以很好地提高性能。
Range Sum Query - Immutable Desicription Given an integer array nums, find the sum of the elements between
例如 StringBuilder, java.util.Date Immutable object (不可变对象):当对象被创建后,你不能修改对象的状态以及字段,例如包装类,如: Integer, Long...Immutable 在 Spring 的 Autowired 注解中比较重要。...在 Spring 的 Autowired 三种方式中,只有构造方法的 Autowired 是限制对象不能为 NULL 的,主要也是针对 Immutable 的问题。...https://www.ossez.com/t/java-mutable-immutable/13265
/learn-about-immutable 1....什么是 Immutable ? Immutable Data 就是一旦创建,就不能再被更改的数据。对 Immutable 对象的任何修改或添加删除操作都会返回一个新的 Immutable 对象。...Immutable 有什么优点?.../immutable-js/docs/#/?...fileGuid=tCVw8Y6Cv8J3KYHw) Immutable官方文档 (https://immutable-js.github.io/immutable-js/docs/#/?
import React from 'react'; import Immutable from 'immutable'; import '..../NumberCount'; afterEach(cleanup); test('点击加菜按钮', () => { const props = { dish: Immutable.fromJS...props.addToCart).toBeCalledWith(props.dish); }); test('点击减菜按钮', () => { const props = { dish: Immutable.fromJS.../SelectDish'; afterEach(cleanup); test('选择多规格菜品', () => { const props = { spuDish: Immutable.fromJS...({ spuId: '111' }), cartDishList: Immutable.fromJS({}), selectSkuDish: jest.fn(), toggleMultiPanelAction
Immutable.js Immutable的优势 1. 保证不可变(每次通过Immutable.js操作的对象都会返回一个新的对象) 2. 丰富的API 3....性能好 (通过字典树对数据结构的共享) Immutable的问题 1....a = Immutable.fromJS({ a: { data: 1, }, b: { newData: { data: 1 } } }) const...需要注意的点 使用Immutable需要注意的点 1....以及在 react+redux 项目中的实践 Using Immutable.JS with Redux 不变应万变-Immutable优化React React-Redux分析
(mapStateToProps, mapDispatchToProps)(TestRedux ) 备注:为了确保redux中的state不能够直接修改其中的值和统一数据格式,一般建议结合 immutable.js...使用 具体需查阅官方文档:https://immutable-js.github.io/immutable-js/docs/#/ 示例: 修改 reducer.js 文件 import.../action-type' import { fromJS } from "immutable"; // 创建一个默认的仓库,一般提出来会更加清晰 //const defaultState = { /.../ userInfo: {} //} // 转换为 immutable 数据格式 const defaultState = fromJS({ userInfo: {} }) // reducer...type } = action // 深拷贝,一定不能直接对state进行修改 // const newState = JSON.parse(JSON.stringify(state)) immutable
Why 为什么 React 需要 immutable How 如何在使⽤ React 使⽤ immutable What 带来的收益和结果 为什么要在React 使⽤ immutable ⼀句话概况:...Immutable 并不意味着我们要详尽地克隆所有对象的 ramifications。这将不会很有效率。我们只需要通过我们改变的路径来创建新的引⽤。 END
领取专属 10元无门槛券
手把手带您无忧上云