javascript - 如何在嵌套的 Immutable.js 映射和列表中执行推送操作。?

标签 javascript reactjs react-native redux immutable.js

我将 pepperoni-app-kit 用于 Immutable.js 附带的 react-native。我以前从未使用过 Immutable.js,我发现执行一个简单的任务真的很难

我想在消息列表中推送一条消息,它位于 Map 中。

someReducer.js

import {Map,List} from 'immutable';

const initialState = Map({isReady : false , messages : List([])});

// reducer switch case
return state.update('messages',messages=>messages.concat(action.Message.payloadString);
// not working
//I also tried
return state.get('messages').push(Immutable.Map({text:'some text',...}))

如何使用 Immutable.js 编写这段 ES6 代码

var newState = state; // copy state 
newState.messages.push({text:'hello world',...otherInfo}); // make changes
return object.assign({},newState); // return a new object.

最佳答案

describe('how-to-perform-push-operation-in-a-nested-immutable-js-map-and-lists', () => {
    const initialState = Immutable.Map({
        isReady: false, 
        messages: Immutable.List([]),
    });

    it('should `push` using List.update', () => {
        const payload = 'some text';
        const updatedState = initialState.update('messages',
            (list) => (list.push(payload))
        );
        // passes:
        expect(updatedState.getIn(['messages', 0])).to.equal(payload);
    });

    it('should `concat` using List.update', () => {
        const multiMessagePayload = ['alpha', 'beta'];
        const reUpdatedState = initialState.update('messages',
            (list) => (list.concat(multiMessagePayload))
        );
        // passes:
        expect(reUpdatedState.get('messages').size).to.equal(2);
    });
});

关于javascript - 如何在嵌套的 Immutable.js 映射和列表中执行推送操作。?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41530798/

相关文章:

javascript - 如何在 100% JavaScript 网络应用程序上转换广告?

javascript - 根据其他 div 高度设置动画 div 高度

javascript - 单击:Reactjs时如何更改部分字符串的样式

javascript - 难以理解 React setState 异步性

android - React-Native ,抽屉导航器(React-Navigation)中的项目在某些设备上不完全可见

javascript - React Native FlatList 水平模式根本不起作用

javascript - ChartJS v2 - 当用户单击多线图的一个点时保持工具提示打开

javascript - .getImageData() 具有背景图像属性?

javascript - 防止历史导航导致 React 中的重新加载

ios - Expo.Notifications.addListener() 未触发(iOS 独立应用程序)