知识点整理
何为数据双向绑定:View层和Model层的数据相互影响。
相同点:
不同点:
react中render函数是支持闭包特性的,所以我们import的组件在render中可以直接调用。
但是在Vue中,由于模板中使用的数据都必须挂在this 上进行一次中转,所以我们import 一个组件完了之后,还需要在components中再声明下,这样显然是很奇怪但又不得不这样的做法。
框架实际没有好坏之分
多个视图依赖于同一状态,这个状态又称为共享状态,vuex是对多个组件的共享状态进行集中式的管理(读/写)
从实现原理上来说,最大的区别是两点:
Redux 使用的是不可变数据,而Vuex的数据是可变的。Redux每次都是用新的state替换旧的state,而Vuex是直接修改
Redux 在检测数据变化的时候,是通过 diff 的方式比较差异的,而Vuex其实和Vue的原理一样,是通过 getter/setter来比较的(如果看Vuex源码会知道,其实他内部直接创建一个Vue实例用来跟踪数据变化)
store 注入和使用方式有一些区别。
1.在 Vuex 中,$store 被直接注入到了组件实例中,因此可以比较灵活的使用:使用 dispatch 和 commit 提交更新,
通过 mapState 或者直接通过 this.$store 来读取数据
在 Redux 中,我们每一个组件都需要显示用 connect 把需要的 props 和 dispatch 连接起来。
2. Vuex 更加灵活一些,组件中既可以 dispatch action 也可以 commit updates,而 Redux 中只能进行 dispatch,并不能直接调用 reducer 进行修改。
vuex详解: 在线文档: https://vuex.vuejs.org/zh-cn/
都是对象
const state = {xxx: initValue}
Modules: 可以有多个 module。一个 module 是一个 store 的配置对,与一个组件(包含有共享数据)对应
最后 向外暴露 store 对象
export default new Vuex.Store({
state,mutations,actions,getters })
组件中使用:
通过 mapState :{{xxx}} {{mmm}} @click="zzz(data)"或者直接通过 this.$store 来读取数据
import {mapState, mapGetters, mapActions} from 'vuex'
export default {
computed: {
...mapState(['xxx']),
...mapGetters(['mmm']),
}
methods: mapActions(['zzz'])
}
映射 store
import store from './store'
new Vue({
store
})
所有用 vuex 管理的组件中都多了一个属性$store, 它就是一个 store 对象,属性有state: 注册的 state 对象,getters: 注册的 getters 对象
DOM和虚拟DOM的区别
Virtual DOM是真实DOM的抽象,用JS对象的形式,来模拟页面上的DOM嵌套关系。如果需要改变任何元素的状态,先在Virtual DOM上进行改变,比较两棵虚拟DOM树的差异,得到差异对象,把差异对象应用到真正的DOM树上,而不是直接改变真实的DOM。Virtual DOM 有更好的跨平台性。
区别
·DOM:浏览器中,提供的概念;用JS对象,表示页面上的元素,并提供了操作元素的API
·虚拟DOM:是框架中的概念;而是开发框架的程序员,手动用JS对象来模拟DOM元素和嵌套关系
·本质: 用JS对象,来模拟DOM元素和嵌套关系
·目的:就是为了实现页面元素的高效更新
按需渲染页面(只重新渲染排序中需要更新的数据所对应的页面元素)