使用immutable.js让你的react程序更加高效

使用immutable.js让你的react程序更加高效

第一步

npm i redux-immutable immutable -S
//喜欢 yarn的同学
yarn add redux-immutable immutable 

第二步

//接下来需要在你的reducer里修改defaultState
import { Map,List,fromJS } from 'immutable';
// Map,List,fromJS是博主比较常用的,其它小伙伴想更深入的了解可以点击这里
const defaultState = Map({
	name:"Your name",
	x:{
		y:{
			z:"blue"
		}
	}
})

export default (state=defaultState,action)=>{
	switch(action){
		default:
			return state
	}
}

接下来修改你的reducer的导出文件

import { combineReducers } from 'redux-immutable'
import testReducer from './testReducer'

export default combinReducers({ testReducer })

接下来页面当中应该可以取得到了

import React,{ PureComponent } from "react"
import { connect } from "react-redux"

const mapStateToProps = (state)=>{
	return {
		name: state.getIn(['testReducer','name']),
		z:state.getIn(['testReducer',"x","y","z"])
	}
}

@connect(mapStateToProps)
class TestPage extends PureComponent{
	render(){
		return (
			<div>{ this.props.name }-----{tihs.props.z}</div>
		)
	} 
}

这时候你的immutable数据已经正常显示,接下来我们尝试修改下

import actionTypes from './actionTypes' 
export default (state=defaultState,action)=>{
	switch(action){
		case actionTypes.CHANG_ENAME_ACTION:
			//使用updateIn 方法示例
			return state.updateIn(["name"],item=>action.payload.value)
		case actionTypes.CHANG_X_Y_Z_ACTION:
			//使用 setIn 方法示例
			return state.setIn(["x","y","z"],action.payload.value)
		default:
			return state
	}
}

接下来简单介绍一下immutable的几个常用数据类型

/*
	Map    object类型
	List   一般
	fromJS
*/
let state = Map({})  //一般Object的类型使用Map
let listState = List([1,2,3,4]) //array类型可以使用List
let fzState = fromJS({name:"青山",list:[{name:"",children:[]}]}) 
//复杂类型的数据结构可以使用 fromJS 注:一般不建议设计这么复杂的数据结构,尽量扁平化

//set  get
let newState = fzState.set("name","山河")// 会返回一个新的对象,并不会修改 state
console.log(newState.get("name"),state.get("name")) // 山河,青山
//比较两个数据是否一样 的两种方法
newState.equals(state) //false 
is(newState,state)//false

//设置 setIn  getIn 注意第一个入参是 数组
let newState = fzState.setIn(["name"],"山河")// 
console.log(newState.getIn(["name"])) // 山河,青山

//update  ==> 注意与set的区别 是第二个参数为 function
let newState = fzState.update("name",item=>item)// 
let newState = fzState.updateIn(["x","y","z"],item=>item+"  " + "_changed")// 

let js = state.toJS()  //这样就可以把 state转化为js对象了

欢迎指出问题,大家共同学习,谢谢。想要深入学习immutable可以点击这里

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Immutable.js是一个JavaScript库,用于创建不可变的数据结构。它提供了一组用于创建、操作和查询这些数据结构的API。以下是使用Immutable.js的一些常见步骤: 1. 安装Immutable.js 可以使用npm或yarn安装Immutable.js: ```bash npm install immutable ``` ```bash yarn add immutable ``` 2. 导入Immutable.js 在需要使用Immutable.js的文件中,导入Immutable.js的核心模块: ```js import Immutable from 'immutable'; ``` 3. 创建不可变的数据结构 使用Immutable.js的函数来创建不可变的数据结构,例如: ```js const data = Immutable.fromJS({ foo: { bar: 1 } }); ``` 这将创建一个不可变的Map对象,其中包含一个名为`foo`的键,它的值是包含一个`bar`键和值为1的对象。 4. 操作不可变的数据结构 使用Immutable.js的方法来对不可变数据结构进行操作,例如: ```js const newData = data.setIn(['foo', 'bar'], 2); ``` 这将返回一个新的Immutable对象,其中`foo.bar`的值已经被更新为2。需要注意的是,原始的数据结构并没有被修改,而是返回了一个新的对象来代表更新后的值。 5. 查询不可变的数据结构 使用Immutable.js的方法来查询不可变数据结构,例如: ```js const value = data.getIn(['foo', 'bar']); ``` 这将返回`foo.bar`的值,即1。 以上就是使用Immutable.js的基本步骤。需要注意的是,由于Immutable.js创建的数据结构是不可变的,因此在对其进行操作时需要使用Immutable.js提供的方法,而不是原生的JavaScript方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值