vuejs 中 Array.prototype.splice 和 arr.splice 有什么区别?
what is the difference with Array.prototype.splice and arr.splice in vuejs?
代码:(vue2.0, vue-router)
<template>
<a v-for="apiItem in allApis" href="#"></a>
</template>
<script>
computed: mapGetters([
'allApis'
]),
</script>
并在 store/modules
const mutations {
myMutation(state) {
state.apis.splice(0, 1) // A
//Array.prototype.splice.call(state.apis, 0, 1); //B
}
}
const getter = {
allApis: (state) => {
return state.apis
}
}
export default {
state,
getters,
actions,
mutations
}
line A
将更改 allApis
并更新视图
但是 line B
不会更改 allApi
和更新视图;
是的,state.apis.splice(0, 1)
会起作用,因为 Vue 会拦截变异方法并发出事件,正如您在 code.
中看到的那样
const arrayProto = Array.prototype
export const arrayMethods = Object.create(arrayProto)
/**
* Intercept mutating methods and emit events
*/
;[
'push',
'pop',
'shift',
'unshift',
'splice',
'sort',
'reverse'
]
.forEach(function (method) {
// cache original method
const original = arrayProto[method]
正如您在源代码中看到的那样:arrayMethods
是原始数组原型方法,正在被覆盖以提供 vue 的反应功能,因此使用 Array.prototype
会错过 vue 定义的行为。
Vue wraps an observed array’s mutation methods so they will also trigger view updates.
代码:(vue2.0, vue-router)
<template>
<a v-for="apiItem in allApis" href="#"></a>
</template>
<script>
computed: mapGetters([
'allApis'
]),
</script>
并在 store/modules
const mutations {
myMutation(state) {
state.apis.splice(0, 1) // A
//Array.prototype.splice.call(state.apis, 0, 1); //B
}
}
const getter = {
allApis: (state) => {
return state.apis
}
}
export default {
state,
getters,
actions,
mutations
}
line A
将更改 allApis
并更新视图
但是 line B
不会更改 allApi
和更新视图;
是的,state.apis.splice(0, 1)
会起作用,因为 Vue 会拦截变异方法并发出事件,正如您在 code.
const arrayProto = Array.prototype
export const arrayMethods = Object.create(arrayProto)
/**
* Intercept mutating methods and emit events
*/
;[
'push',
'pop',
'shift',
'unshift',
'splice',
'sort',
'reverse'
]
.forEach(function (method) {
// cache original method
const original = arrayProto[method]
正如您在源代码中看到的那样:arrayMethods
是原始数组原型方法,正在被覆盖以提供 vue 的反应功能,因此使用 Array.prototype
会错过 vue 定义的行为。
Vue wraps an observed array’s mutation methods so they will also trigger view updates.