Articles of immutable.js

Redux&Immutable.js – 从json设置状态

我的减速机 var initialState = Map({ status: true }); function user(state = initialState, action) { switch (action.type) { case GET_PROFILE: return state.set(fromJS(action.response)) } }) api返回json – > action.response { "id": 11, "profileImage": "http://img.nodejscore.com/json/addictivesurfing.jpg" } 问题: fromJS设置一个新的Map对象,而不是将数据添加到现有的Map 。 我试图做一些像return state.set(Array(fromJS(action.response)))不起作用。 我怎样才能解决这个问题? 或者我不应该使用Immutable.js?

Immutablejs Map.update打破了unit testing

我试图拿起Redux和我下面的教程使用ImmutableJs。 我对ImmutableJs是完全陌生的,我只是想通过API文档去实现。 我的练习应用比教程复杂得多,所以我走了一段路,可能已经迷路了。 任何时候我使用Map.update()方法,我无法find一种方法来成功地testing我的代码。 这是我写的一个testing,试图找出什么是错的: import chai, {expect} from 'chai'; import chaiImmutable from 'chai-immutable'; import {List, Map} from 'immutable'; chai.use(chaiImmutable); describe("Immutable Test Issues", () => { it("should present accurate immutable equality", () => { // — Maps with Lists match just fine const a1 = Map({ test: 1, args: List([1, 2]) }); const a2 = […]

ImmutableJS:在一个数组数组里面创build一个对象

我有一个有点复杂的状态如下: array: array: object, object, etc… array: etc… 简单地说,一个包含许多数组的对象的数组。 我试图根据它的Id在这个混乱中find这些对象中的一个,并更新它(即设置一个完成的值为true),但迄今还没有能够。 使用Mudash,我设法find这个对象,但我不知道如何再次传递它返回它,我的代码如下: return state.update('data', (arr) => { _.forEach(arr, function(item) { _.forEach(item, function(elt) { if(elt.Id == action.Id) { console.log('Item Found'); elt.set('completed', true); } }); }); return arr; }); 有一些简单的方法来完成这个? 谢谢。

如何在Immutable.js中避免不必要的从数字到string的转换

我正在尝试在reactjs和flux的项目中使用Immutable。 比方说,我有一个.js文件的代码 console.log ( Immutable.Map({1: 2}).toString() ) 我浏览此脚本并从浏览器(Google Chrome)运行它,结果是: "Map { "1": 2 }" 请注意,键1现在是一个string,而不是一个数字。 如果我直接在网站http://facebook.github.io/immutable-js/的控制台上尝试相同的代码,我会得到正确的结果: "Map { 1: 2 }" 为什么会发生这种情况,我能做些什么才能在脚本中获得正确的结果(键为数字)? 我使用节点v0.10.26,Browserify 5.12.0和不可变的3.7.1

Redux React从API创build初始状态

如何从API中定义initialState ? 操作 import * as types from '../constants/ActionTypes' import jquery from 'jquery' import { apiRoot } from '../config.js' import Immutable from 'immutable' import Random from 'random-js' export function fetchLentItemList() { return function(dispatch) { dispatch(fetchLentItems()); jquery.get(`${apiRoot}/api/v1/something/`) .done((data) => { dispatch(fetchLentItems("success", Immutable.fromJS(data))) }) .fail(() => { dispatch(fetchLentItems("error")) }) } } export function fetchLentItems(status, locations = Immutable.List()) […]

根据属性值从ImmutableJS List中删除对象

根据属性的值从列表中删除一个对象最简单的方法是什么? 我正在寻找相当于MongoDB中的$ pull。 我的列表看起来像这样简单: [{a: '1' , b: '1'},{a: '2' , b: '2'}] 我想从数组中删除属性设置为'1'的对象。 在MongoDB中,我会这样做: Model.update({_id: getCorrectParentObj},{ $pull: {listIDeleteFrom: { a: '1' } } },(err, result)=>{}); 我怎样才能得到与ImmutableJS相同的结果?

如何获得几个immutable.js列表的联合

所以,我列出了一个: let a = Immutable.List([1]) 和列表b: let b = Immutable.List([2, 3]) 我想从他们得到列表union === List([1, 2, 3]) 。 我试图合并他们的拳头: let union = a.merge(b); // List([2, 3]) 看起来像merge方法操作与索引,而不是值,所以重写List a的第一个项目与List b第一个项目。 所以,我的问题是什么是最简单的方式来获得几个列表的联合(理想情况下,没有迭代他们和其他额外的操作)。