React替换传统拷贝方法的Immutable使用

immutable

它是一款代替传统拷贝方式的第三方库

优势:

  • 在新对象上操作不会影响原对象的数据
  • 性能好

安装使用

1.下载 npm i immutable

2.导入 import {Map} from 'immutable'

Map

语法:Map(对象)

赋值:set("属性名","新值")

取值:get("属性名")

toJS()转回普通对象

import React, { Component } from 'react';
/**
     * 1.下载 npm i immutable
     * 2.导入 import {Map} from 'immutable'
 */
import {Map} from 'immutable'

var obj={
    name:"碰磕",
    age:20
}
var objImmu=Map(obj);
var newobjImmu=objImmu.set("name","pengkeStudy");
// console.log(objImmu,newobjImmu)
//get('属性')获取值
console.log(objImmu.get("name"),newobjImmu.get("name"));
//toJS转回普通对象
console.log(objImmu.toJS(),newobjImmu.toJS());
/*
//写法一
class Immu02 extends Component {
    state={
        info:Map({
            name:"碰磕",
            age:20
        })
    }
    render() {
        return (
            
Immu02 {this.state.info.get("name")}---- {this.state.info.get("age")}
); } }*/ //写法二 class Immu02 extends Component { state={ info:{ name:"碰磕", age:20 } } render() { return (
Immu02 {this.state.info.name}---- {this.state.info.age}
); } } export default Immu02;

嵌套Map

Map中对象中的对象还要套上Map

可以通过map的get方法获取值向组件传值.,从而完美的解决了组件的无效刷新

shouldComponentUpdate进行判断决定是否需要刷新

import React, { Component } from 'react';
import {Map} from 'immutable'
class Immu03 extends Component {
    state={
        info:Map({
            name:"碰磕",
            age:20,
            hobbit:Map({
                likeone:"运动",
                liketwo:"学习"
            })
        })
    }
    render() {
        return (
            
Immu03 {this.state.info.get("name")}
); } } class Child extends Component{ shouldComponentUpdate(nextProps,nextState){ //判断hobbit的值是否更新 if(this.props.hobbit===nextProps.hobbit){ return false; } return true; } render(){ return(
Child
); } componentDidUpdate(){ console.log("子组件更新了"); } } export default Immu03;

List

可以使用数组的属性方法

import React, { Component } from 'react';
import {List} from 'immutable'
var arr=List([1,231,1])
let arr2=arr.push(4)//不会影响原对象结构
let arr3=arr2.concat([12,323,123])
console.log(arr,arr2,arr3);
class Immu04 extends Component {
    state={
        favor:List(['吃饭','睡觉','学习','运动'])
    }
    render() {
        return (
            
Immu04 { this.state.favor.map(item=>{ return
  • {item}
  • }) }
    ); } } export default Immu04;

    实现个人修改案例

    import { List,Map } from 'immutable';
    import React, { Component } from 'react';
    class Immu05 extends Component {
        state={
            info:Map({
                name:"碰磕",
                location:Map({
                    province:"江西",
                    city:"吉安"
                }),
                hobbit:List(['睡觉','学习','敲键盘'])
            })
        }
        render() {
            return (
                

    编辑个人信息

    {this.state.info.get("name")}
    {this.state.info.get("location").get("province")}- {this.state.info.get("location").get("city")} { this.state.info.get("hobbit").map((item,index)=>
  • {item}
  • ) }
    ); } } export default Immu05;

    通过fromJS、setIn、updateIn进行改进

    • fromJS将普通对象转换为Immutable
    • setIn()深度赋值,参数一为数组形式填写需要修改的,参数二为修改后的值
    • updateIn()深度修改,参数一为数组形式填写需要修改的,参数二为回调函数(参数为原对象)
    import { fromJS } from 'immutable';
    import React, { Component } from 'react';
    class Immu06 extends Component {
        state={
            info:fromJS({
                name:"碰磕",
                location:{
                    province:"江西",
                    city:"吉安"
                },
                hobbit:['睡觉','学习','敲键盘']
            })
        }
        render() {
            return (
                

    编辑个人信息

    {this.state.info.get("name")}
    {this.state.info.get("location").get("province")}- {this.state.info.get("location").get("city")} { this.state.info.get("hobbit").map((item,index)=>
  • {item}
  • ) }
    ); } } export default Immu06;

    这样就学费了Immutable~

    到此这篇关于React替换传统拷贝方法的Immutable使用的文章就介绍到这了,更多相关React Immutable内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    你可能感兴趣的:(React替换传统拷贝方法的Immutable使用)