参考https://blog.csdn.net/yfm120750310/article/details/111353963
provide和inject虽然能够实现层层传递的数据管理,但对于一个大的管理系统而言会显得有些繁琐,我们需要一个大型的状态管理系统。
Vuex不采取组件components相关的provide和inject。
Vuex不采取组件components相关的provide和inject。
https://blog.csdn.net/qq_56989560/article/details/124706021
https://www.cnblogs.com/huifeidezhuzai/p/16378841.html
import Vue from 'vue'
import Vuex from 'vuex'Vue.use(Vuex)export default new Vuex.Store({//数据,相当于datastate: {},getters: {},//里面定义方法,操作state方发mutations: {},// 操作异步操作mutationactions: {},modules: {},
})
import Vue from 'vue'
import Vuex from 'vuex'
import App from './App.vue'Vue.use(Vuex)
Vue.config.productionTip = falseconst store = new Vuex.Store({state: {count: 0,},
})new Vue({store,render: h => h(App),
}).$mount('#app')
{{count}}
import Vue from 'vue'
import Vuex from 'vuex'
import App from './App.vue'Vue.use(Vuex)
Vue.config.productionTip = falseconst store = new Vuex.Store({state: {count: 0,},mutations:{increment(state){state.count++}}
})new Vue({store,render: h => h(App),
}).$mount('#app')
{{count}}
import Vue from 'vue'
import Vuex from 'vuex'
import App from './App.vue'Vue.use(Vuex)
Vue.config.productionTip = falseconst store = new Vuex.Store({state: {count: 0,},mutations:{increment(state,n){state.count +=n}}
})new Vue({store,render: h => h(App),
}).$mount('#app')
{{count}}
import Vue from 'vue'
import Vuex from 'vuex'
import App from './App.vue'Vue.use(Vuex)
Vue.config.productionTip = falseconst store = new Vuex.Store({state: {count: 0,},mutations:{increment(state){state.count ++}},actions:{increment({state}){state.count ++}}
})new Vue({store,render: h => h(App),
}).$mount('#app')
{{count}}
import Vue from 'vue'
import Vuex from 'vuex'
import App from './App.vue'Vue.use(Vuex)
Vue.config.productionTip = falseconst store = new Vuex.Store({state: {count: 0,},mutations:{increment(state){state.count ++}},actions:{increment({state}){setTimeout(()=>{state.count ++},3000)}}
})new Vue({store,render: h => h(App),
}).$mount('#app')
{{count}}
import Vue from 'vue'
import Vuex from 'vuex'
import App from './App.vue'Vue.use(Vuex)
Vue.config.productionTip = falseconst store = new Vuex.Store({state: {count: 0,},mutations:{increment(state){state.count ++}},actions:{increment({state}){state.count ++}},getters: {doubleCount(state){return state.count*2},},
})new Vue({store,render: h => h(App),
}).$mount('#app')
{{count}}
{{$store.getters.doubleCount}}
1)在main.js中引入Vuex
import Vue from 'vue'
import Vuex from 'vuex'
import App from './App.vue'Vue.use(Vuex)
Vue.config.productionTip = falseconst store = new Vuex.Store({state: {count: 0,},mutations: {increment(state) {state.count++}},actions: {increment({commit}) {setTimeout(()=>{// state.count++ // 不要对state进行更改操作,应该通过commit交给mutations去处理commit('increment')}, 3000)}},getters: {doubleCount(state) {return state.count * 2}}
})new Vue({store,render: h => h(App),
}).$mount('#app')
2)APP.vue中, $ store.dispatch
对应的是action的定义,$ store.commit
对应的是mutations 的定义:
{{count}}
{{$store.getters.doubleCount}}
$ store 是如何是如何挂载到实例 this 上的?==>通过new Vue中放置store
前面提到的五个核心概念的取值,vuex提供了很多简写的方式:
1)效果
2)文件架构
3)代码(见链接)
4)代码
computed的两种写法
computed: {...mapState({checkoutStatus: state => state.cart.checkoutStatus}),...mapGetters('cart', {products: 'cartProducts',total: 'cartTotalPrice'}),// ...mapGetters({// products: 'cart/cartProducts',// total: 'cart/cartTotalPrice'// })},// computed: {// checkoutStatus(){// return this.$store.state.cart.checkoutStatus// },// products() {// return this.$store.getters['cart/cartProducts']// },// total() {// return this.$store.getters['cart/cartTotalPrice']// }// },
传统开发模式下,每个url都对应着一个html页面,每次切换url的时候会引起页面的重新加载,在这种情况下诞生了单页面(spa)开发模式,用户在切换url的时候不在是执行页面的变化,而是根据我们的逻辑进行执行,返回数据。
https://blog.csdn.net/qq_41552648/article/details/125807963
router-view写在什么地方,component组件就匹配到什么地方。
1.router-view是路由的出口,没有它页面则没法进行显示。
2.二级路由的出口对应在一级路由里面进行配置。
3.一个router-view只能存储一个组件,当路径发生改变,之前的会消失。
https://blog.csdn.net/qq_59076775/article/details/124700670
1)main.js:在main.js中引入路由
import Vue from 'vue'
import VueRouter from 'vue-router'
import App from './App.vue'
import routes from './routes'Vue.config.productionTip = falseVue.use(VueRouter)const router = new VueRouter({// mode: 'history',routes,
})new Vue({router,render: h => h(App),
}).$mount('#app')
2)App.vue:在里面加入了
组件。
router demo
3)routes.js:在路由配置列表中则进行如下配置
import RouterDemo from './components/RouterDemo'
import RouterChildrenDemo from './components/RouterChildrenDemo'const routes = [{ path: '/foo', component: RouterDemo, name: '1' },{ path: '/bar', component: RouterDemo, name: '2' },// 当 /user/:id 匹配成功,// RouterDemo 会被渲染在 App 的 中{ path: '/user/:id', component: RouterDemo, name: '3',props: true,children: [{// 当 /user/:id/profile 匹配成功,// RouterChildrenDemo 会被渲染在 RouterDemo 的 中path: 'profile',component: RouterChildrenDemo,name: '3-1'},{// 当 /user/:id/posts 匹配成功// RouterChildrenDemo 会被渲染在 RouterDemo 的 中path: 'posts',component: RouterChildrenDemo}]},{ path: '/a', redirect: '/bar' },{ path: '*', component: RouterDemo, name: '404' }
]export default routes
4)components/RouterDemo.vue
Go to Foo
Go to /user/12
Go to /user/12/profile
Go to 404
Go to a 重定向到 bar
Go to Foo
id: {{id}}
{{routerInfo}}
5)components/RouterChildrenDemo.vue
{{routerInfo}}
今天遇到的一个坑,发现是vue.js的版本问题,凡是v2.6.0到v2.6.8都无法正常使用标签,不知道还有没有其他版本不能使用!
warning in ./src/main.js
export ‘default’ (imported as ‘VueRouter’) was not found in ‘vue-router’ (possible exports: NavigationFailureType, RouterLink, RouterView, START_LOCATION, createMemoryHistory, createRouter, createRouterMatcher, createWebHashHistory, createWebHistory, isNavigationFailure, loadRouteLocation, matchedRouteKey, onBeforeRouteLeave, onBeforeRouteUpdate, parseQuery, routeLocationKey, routerKey, routerViewLocationKey, stringifyQuery, useLink, useRoute, useRouter, viewDepthKey)
https://blog.csdn.net/Lydia214/article/details/125453374
package.json文件在rules中配置 “no-unused-vars”: “off” 解决(关闭提示)
1)main.js:mode: 'history'
import Vue from 'vue'
import VueRouter from 'vue-router'
import App from './App.vue'
import routes from './routes'Vue.config.productionTip = falseVue.use(VueRouter)const router = new VueRouter({mode: 'history',routes,
})new Vue({router,render: h => h(App),
}).$mount('#app')
我们都知道spa单页面的缺点有以下几种:
针对这两个缺点,我们会有一些方案来解决:
Prerendering预渲染
SSR
那么针对这些问题Nuxt就是去做这些操作:
Vetur
ESLint
Prettier
Vue DevTools
上一篇:小江洲和司马太亲热了,蓝湿了