当前位置: 首页> 游戏> 攻略 > 俄罗斯ip地址_简要说明网站制作的基本步骤_seo排名赚app多久了_山东做网站

俄罗斯ip地址_简要说明网站制作的基本步骤_seo排名赚app多久了_山东做网站

时间:2025/7/12 15:53:36来源:https://blog.csdn.net/qq_27702739/article/details/143231018 浏览次数:0次
俄罗斯ip地址_简要说明网站制作的基本步骤_seo排名赚app多久了_山东做网站

Immutable.js出自Facebook,是最流行的不可变数据结构的实现之一。它实现了完全的持久化数据结构,使用结构共享。所有的更新操作都会返回新的值,但是在内部结构是共享的,来减少内存占用。Immutablejs官网

在上一篇介绍redux的文章,我们可以看到在创建的reducer中进行数据更改的时候,会使用…来复制状态数据,为的就是不对原数据进行直接修改,只做替换,就是为了实现react的数据不可变immutable。也就是说如果state的数据比较简单那还好,万一比较复杂,就要复制很多这样的结构数据,很占内存影响app的性能。
在这里插入图片描述

安装

npm i immutable redux-immutable -S

替换redux中的combineReducers,改用redux-immutable里面的

import { createStore } from "redux";
import { combineReducers } from "redux-immutable";import { CounterReducer } from "./CounterReducer";const reducers = combineReducers({count: CounterReducer,
});let store = createStore(reducers);store.subscribe(() => console.log(store.getState()));export default store;

改造reducers里面的代码

import { fromJS } from "immutable";
const initialState = fromJS({counter: 0,userInfo: {name: "John Doe",age: 25,},
});
function CounterReducer(state = initialState, action) {switch (action.type) {case "ADD":return state.update("counter", (val) => {console.log("🚀 ~ returnstate.update ~ val:", val);return val + 1;});case "DEC":return state.update('counter',value => value - 1)default:return state;}
}export { CounterReducer };

组件里面使用方式变化
DemoA.js

import store from "../../store";
function DemoA() {const count = store.getState().get("count").get("counter");return (<div><p> Demo A count: {count}</p></div>);
}
export default DemoA;

DemoB.js

import store from "../../store";function DemoB() {const data = store.getState().get("count");return (<div><p>Demo B</p><div><span>name: {data.getIn(["userInfo", "name"])}</span> <br /><span>age: {data.getIn(["userInfo", "age"])}</span><span>count:{data.get("counter")}</span></div><button onClick={() => store.dispatch({ type: "ADD" })}>add count</button></div>);
}
export default DemoB;

index.js

import DemoA from "./DemoA";
import DemoB from "./DemoB";
import store from "../../store/index";
import { useEffect, useState } from "react";
function Redux() {console.log(store.getState(), "store.getState()");const [counter, setCount] = useState(store.getState().get("count").get("counter"));useEffect(() => {const unsubscribe = store.subscribe(() => {console.log("aaaa");setCount(store.getState().get("count").get("counter"));});return () => {unsubscribe();};}, [counter]);return (<div>Redux<hr />parent count:{counter}<DemoA /><DemoB /></div>);
}export default Redux;

实现了同样的效果
请添加图片描述

关键字:俄罗斯ip地址_简要说明网站制作的基本步骤_seo排名赚app多久了_山东做网站

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: