[toc]
## 数据传递和设置html属性
Vue中通过`v-bind:`传递数据,通过`v-on:emit的的值`传递函数
而React中不论是哪种数据类型(包括函数),都是以一个tag属性的形式传递的
另外不从传递数据方面讲,而是从设置html属性的角度来看,
---
React和原生的没有区别,Vue也没有区别
,但是Vue还可以通过`v-bind:`来设置原生的html属性,此时属性的值不再是字符串,而是一个JS表达式(同React中的`xx={}`),并且vue对一些特殊的属性进行了封装,比如`style`、`class`
,另外需要注意的是通过`v-bind`绑定的属性必须要有值,不然会报错。
## 关于入口
Vue会替换掉绑定的入口(`<div id="app">`)
,而React不会
其实替换一词用得不准确,准确来说是,在声明周期`created`和`beforeMount`之间,Vue如果发现用户使用`template`属性创建模板,就会忽略el挂载点的模板而采用template属性指定的模板。
## 关于重新渲染
React必须调用setState(只要调用,即使是个`{}`)或则接收的属性发生改变才会重新渲染组件
而Vue是`this.$data`里的属性发生改变,并且发生改变的数据被模板渲染所依赖的话,才会重新渲染
### 另外如果这个属性是个数组
直接改变存在于$data里的某个数组属性,是不会重新渲染模板的,必须通过vue支持的7种数组的变异方法才会
- push
- pop
- shift
- unshift
- splice
- sort
- reverse
或则可以通过改变数组属性的引用`this.list = this.list.filter((item,i)=>i!==index);`
再或则通过set方法向对象里注入数据 `Vue.set(vm.userInfo,1,'ahhh')`
(第二个参数为要改变数组第几项,第三个参数为要被替换成的数据)
set方法实例上也有`vm.$set(vm.userInfo,1,'ahhh')`
### 另外如果这个属性是对象
改变对象的值会重新渲染,但添加并不会,`delete obj[attr]` 也不会
,解决办法是通过改变对象的引用
,或则通过set方法向对象里注入数据 `Vue.set(vm.userInfo,'location','chengdu')`
set方法实例上也有`vm.$set(vm.userInfo,'location','chengdu')`
## data、state
Vue没有state的概念,只有data。
但Vue的data是`reactive`的,等同于state,但无需像React一样必须通过`setState`来修改
### Vue能监听专门某一个属性的变化
通过`watch`
## slot和children
`<slot>` 就相当于React中的`{this.props.children}`
默认所有children都会放到组件中<slot>放置的位置
若想某个组件放到某个地方 请使用具名插槽
另外`this.$slots.default` 能获得所有没有设置名字的slot 元素
,`$slots.xx` 能获得名字设置为`'xx'`的slot元素
,这方便在JSX中直接`{this.$slotx.xx}`使用
### $children
**Vue** 中的 **$children** 是所有子**组件** 而不是所有child
![](https://box.kancloud.cn/8718297168899f88cf05c8b4c646f347_342x96.png)
## <>组件
vue中的组件都以小写开头
而React以大写字母开头
另外vue中标签**不**支持自闭和
- 空白目录
- vue-cli
- runtime-only
- Vue对比React
- 组件与实例
- data-binding
- computed的set和get
- scoped
- 事件
- 自定义指令
- 插件
- keep-alive
- $nextTick与生命周期
- 路由
- Vue.use(Router)
- this.$router编程式导航
- this.$route
- new Router
- routes
- mode
- linkClass
- scrollBehavior
- query
- fallback
- base
- router-view
- router-link
- 路由守卫
- 左右切换
- 滚动
- FAQ
- vuex
- 适用
- new Vuex.Store
- state
- mutations
- getters
- actions
- strict
- plugins
- modules
- namespace
- this.$store
- commit
- dispatch
- mapXX
- eventBus
- Vue工程相关
- 引用路径的简化
- css-module
- vue-loader
- 异步加载
- 支持jsx
- 让webpack支持对vuex的热替换
- .eslintrc