什么是Vuex?详述Vuex的工作流程
Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。Vuex 也集成到 Vue 的官方调试工具 devtools extension,提供了诸如零配置的 time-travel 调试、状态快照导入导出等高级调试功能
vuex的工作流程:
1.在vue组件里面,通过dispatch来触发actions提交修改数据的操作。
2.然后再通过actions的commit来触发mutations来修改数据。
3.mutations接收到commit的请求,就会自动通过Mutate来修改state(数据中心里面的数据状态)里面的数据。
4.最后由store触发每一个调用它的组件的更新
Vuex的作用:项目数据状态的集中管理,复杂组件(如兄弟组件、远房亲戚组件)的数据通信问题。
详述Vuex的核心属性及使用
Vue有五个核心概念,state, getters, mutations, actions, modules。
state进行状态管理 如果你有一处需要被多个实例间共享的状态,可以简单地通过维护一份数据来实现共享:
State: 保存组件的共享的状态。
Getter:用于state的延伸,就是computed计算属性的功能。
Mutation: 唯一可以改变store的状态的方法:(commit)mutation
Action: 只能提交Mutation,可以包括async操作。
Module: 解决单一状态树,导致对象过于庞大的问题。将store分割为多个module模块。相当于是嵌套子模块。
state是存放公用数据的,类似于vue中的data函数,不能直接修改里面的数据,要通过mutations去修改
getter里的函数就是vuex里的计算属性,类似于computed函数。
更改 Vuex 的 store 中的状态的唯一方法是提交 mutation。Vuex 中的 mutations 非常类似于事件:每个 mutation 都有一个字符串的 事件类型 (type) 和 一个 回调函数 (handler)。这个回调函数就是我们实际进行状态更改的地方,并且它会接受 state 作为第一个参数
Action 类似于 mutation,不同在于:Action 提交的是 mutation,而不是直接变更状态。Action 可以包含任意异步操作。
Modules:由于使用单一状态树,应用的所有状态会集中到一个比较大的对象。当应用变得非常复杂时,store 对象就有可能变得相当臃肿。为了解决以上问题,Vuex 允许我们将 store 分割成模块(module)。每个模块拥有自己的 state、mutation、action、getter、甚至是嵌套子模块——从上至下进行同样方式的分割
Vue和Jquery的区别?
jQuery是使用选择器($)选取DOM对象,对其进行赋值、取值、事件绑定等操作,其实和原生的HTML的区别只在于可以更方便的选取和操作DOM对象,而数据和界面是在一起的。比如需要获取label标签的内容:$("lable").val();,它还是依赖DOM元素的值。
Vue则是通过Vue对象将数据和View完全分离开来了。对数据进行操作不再需要引用相应的DOM对象,可以说数据和View是分离的,他们通过Vue对象这个vm实现相互的绑定。这就是传说中的MVVM。
vue适用的场景:复杂数据操作的后台页面,表单填写页面
jquery适用的场景:比如说一些html5的动画页面,一些需要js来操作页面样式的页面
然而二者也是可以结合起来一起使用的,vue侧重数据绑定,jquery侧重样式操作,动画效果等,则会更加高效率的完成业务需求
Vue中slot是什么
插槽(Slot)是Vue提出来的一个概念,正如名字一样,插槽用于决定将所携带的内容,插入到指定的某个位置,从而使模板分块,具有模块化的特质和更大的重用性。
插槽显不显示、怎样显示是由父组件来控制的,而插槽在哪里显示就由子组件来进行控制
SPA(单页面)首屏加载慢,该如何解决?
1.用webpack插件(缩小webpack或者其他打包工具生成的包的大小)
抽取css文件、模块化抽取、gzip代码压缩、代码压缩、nginx开启gzip、sendfile
2Vue-router懒加载
使用CDN加速、gzip压缩、异步加载组件、服务端渲染
1,模块化
模块化是后期优化的首要步骤,通过模块化划分,我们可以将应用按照不同功能或者作用划分为不同模块,这样也使得应用结构更加清晰
模块的建立方法step 1 : 创建模块step 2 : 创建组件 step 3 : 创建模块路由
2,懒加载
懒加载路由
在根路由中,将原url与component的关联改为url与loadChild关联即可