Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

关于immutable.js的使用 #9

Open
ckinmind opened this issue Feb 8, 2017 · 0 comments
Open

关于immutable.js的使用 #9

ckinmind opened this issue Feb 8, 2017 · 0 comments

Comments

@ckinmind
Copy link
Owner

ckinmind commented Feb 8, 2017

在项目的appleBasketReducer.js中使用了immutable
参考资料:immutable github
参考资料:immutableJS一些API
参考资料:Immutable 详解及 React 中实践

import { fromJS } from 'immutable';
// 这个是state
const state = {
    isPicking: false,
    newAppleId: 3,
    apples: [
        {
            id: 0,
            weight: 233,
            isEaten: false
        },
        {
            id: 1,
            weight: 235,
            isEaten: true
        },
        {
            id: 2,
            weight: 256,
            isEaten: false
        }
    ]
};

// 1. 修改第一层的isPicking, test1和test是两个不同对象
let test1 = fromJS(state).set('isPicking', true).toJS();

/******************************************************************************/

// 2. 多层设置,test2和test是两个不同对象
let test2 = fromJS(state).setIn(['apples', 1, 'isEaten'], true).toJS()
// 备注:这里1指的是第二层中,也就是apples数组中索引为1对象的对象,
// 所以这里更改的是id为1的数据,实际上还是需要先得到数据在数组中的确切索引
// 这里是简化处理,直接将id值关联索引值

/******************************************************************************/

// 3.  链式调用,新增数据
 let newApple =  {
                id: state.newAppleId,
                weight: action.payload,
                isEaten: false
            };
 /** 在apples中新增一个newApple, 将newAppleId增加1, 将isPicking设为false*/
let test3 = fromJS(state).update('apples', list => list.push(newApple))
                                .set('newAppleId', state.newAppleId + 1)
                                .set('isPicking', false)
                                .toJS();
// 备注:这里update可以新增一个数组,第二个参数是个回调函数
  1. fromJS将原生的数据类型转化为immutable的数据类型,Map(对应Object)或者List(Array)
    最后通过toJS()在转化回原生对象

  2. set是设置数据,设置第一层的值

  3. setIn的第一个参数数组,指定设置的层级

  4. 可以使用链式调用的方式,方法的第二个参数可以制定一个回调函数来处理一些复杂的计算

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant