vue 中数组和json的响应式

一. vue 中数组操作的响应式


1. Vue 中javaScript 数组响应式操作的方法

    1. push()方法响应式, 向数组末尾追加元素
let names = [1,2,3,4,5,6]
 
names.push('a')
names.push('b', 'c','d') // 一次追加多个元素
let arr = ['A', 'B', 'C']
names.push(...arr)  //相当于是分别push('A'),push('B'),push('C')
    1. pop() 方法响应式, 删除末尾的元素
let names = [1,2,3,4,5,6]
names.pop() // 删除末尾的一个元素
    1. shift() 方法响应式, 删除首个元素
let names = [1,2,3,4,5,6]
names.shift()
    1. unshift() 方法响应式, 在数组前面插入元素
let names = [1,2,3,4,5,6]
names.unshift('A1')   // 数组首尾插入元素
names.unshift('B1', 'B2') // 数组首尾插入 多个元素
let arr2 = ['c1', 'c2']
names.unshift(...arr2)  // 相当于数组展开后 依次插入
    1. splice() 方法响应式, 删除元素/ 插入元素/ 替换元素

let arr3 = [0,1,2,3,4,5,6,7,8,9]

// 删除元素
arr3.splice(startIndex)  // 删除索引startIndex之后的所有的元素
arr3.splice(startIndex, length) // 删除索引startIndex开始之后的length个元素
// arr3.splice(startIndex) 等价于 arr.splice(startIndex, 1)

// 替换元素
arr3.splice(startIndex, length, item0, item1, item2) // 将从索引startIndex开始的length长度的元素使用后面的 item0,item1, item2 ... 替换掉
let arr4 = ['a','b']
arr3.splice(startIndex, length, ...arr4) // 将从索引startIndex开始的length长的元素使用 arr4 展开替换


// 插入元素
arr3.splice(startIndex, 0, item0, item1, item2) // 在startIndex的位置插入 item0/ item1/item2 元素
let ar = ['A','B']
arr3.splice(startIndex, 0, ...ar) // 在 startIndex位置展开数组ar 插入进去

splice 方法的理解:
相当于splice 有三个参数, startIndex, lentgth, ..args
splice 的整体思想是替换, 当第三个参数 ...args没有时就把 startIndex开始的length替换换空, 就相当于删除, 当...args参数有值时表示替换, 当替换范围lenght 大于0,就使用..args替换指定的长度,如果length==0 表示没有替换的范围直接将...args 插入. splice 整体的思路是替换

    1. sort(func) 响应式方法, 排序
let arr11 = [1,7,5, 10, 0]
arr.sort()  // 默认排序, 默认是将数组元素转换为字符串, 按照字符串升序排序
arr.sort(function(a,b){ // 升序排序
  return a > b
})
arr.sort(function(a,b){ // 降序排序
  return a > b
})
    1. reverse() 响应式方法, 数组翻转
let arr12 = [1,2,3,4]
arr12.reverse()


2. 在vue 中如果你直接使用下标操作数组元素是不会有响应式结果的

let arr = [0,1,2,3,4]
arr[1] = '没有响应式结果'   // 要避免这种直接操作内存的写法
arr[5] = '也是没有响应式结果的'




除了通过js中数组提供的方法来操作,可以实现js数组的响应式操作外, 在vue 模块中也为我们提供了方法, 通过这个方法,我们在vue中对数组的增删改查都可以实现响应式的效果


// 1. 安装vue模块
npm install vue --save

// 2. 导入vue模块
import Vue from 'vue'

let arr = [1,2,3,4]
//3. 调用vue提供的set方法对数组进行增删查改即可
Vue.set(arr, 1, 'vue的响应式')
Vue.delete(arr, 1)



二. vue 中json 对象操作的响应式

  1. 在vue 中json 对象的响应式原理和数组的响应式原理一样的, 要想json对象中的数据是响应式的, 需要现在组件的 data内或者 vuex 的store中的state内先定义json数组, 在对数组进行操作, 这样才能达到响应式
  2. 在vue中直接通过点语法或['key'], 来修改 state 或者data 中的json对象数据时, 只有先定义的数据才有响应式, 如果是通过点语法或['key'] 新增json对象的字段, 是没有响应式效果的.如下:
以下是以vuex 中的store 中的state 中定义的数据距离说明, 在vue组件中的data内定义的数据也是同样的道理

state:{
  info:{
    name:'zhangsan',
    age:18
  }
},
mutations{
  updateAge(state, age){
    state.info.age = age  //响应式
  },
 appendAddress(state, add ){
    state.info['address']= add  //无响应式
    // state.info.address = add  //无响应式
  },
}



三. vue 中响应式总结

如果想要在vue 中实现, 数据变化就有响应式, 请使用vue 提供的 vue.set() 方法来实现对数据的增删查改, 这样在对数据进行操作时就不必关心定义问题了, 只管操作即可.

详细定义如下:
  set<T>(object: object, key: string | number, value: T): T;
  set<T>(array: T[], key: number, value: T): T;
  delete(object: object, key: string | number): void;
  delete<T>(array: T[], key: number): void;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,928评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,192评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,468评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,186评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,295评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,374评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,403评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,186评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,610评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,906评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,075评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,755评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,393评论 3 320
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,079评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,313评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,934评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,963评论 2 351