多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[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中标签**不**支持自闭和