react.js - React 为什么 immutable 对象变化了但是 state 和 视图 都没有更新?

查看:151
本文介绍了react.js - React 为什么 immutable 对象变化了但是 state 和 视图 都没有更新?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

const { Map } = require('immutable');

const initState = Map({
    darken: {
        color: '#ffffff',
    },
})

export default (state = initState, action) => {
    switch (action.type) {
        case 'COLOR_CHANGE': 
            // 每次打印出还是原来那样
            console.log(state.toJS());
            const data = state.get('darken');
            data.color = action.value;
            const newState = state.set('darken', data);
            // 这里看到数据已经是变化了啦
            console.log(JSON.stringify(newState.toJS()));
            return newState;
        default:
            return state;
    }
}

打印出的 state 已经是变化的了,但是视图上并没有更新到新值,而且每次进入 reducer 都是打出还是原来的 state。

本来 initState 里面 没有使用 darken 属性包裹起来的时候,是正常的。使用 darken 包裹多一层就发现 更新不了 state 了

解决方案

因为虽然stateimmutable的,但是darken不是immutable的啊。

你试试:

const temp = data = state.get('darken');
data.color = action.value;
const newState = state.set('darken', data);

console.log(temp === newState.get('darken')); // true

这篇关于react.js - React 为什么 immutable 对象变化了但是 state 和 视图 都没有更新?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆