标签:rand NPU 部署 tar 字段 改变 inpu data 镜像
(1)STATE
在main.js引入store并且在new Vue({})实例中添加store后,在全局都可以调用store
eg:
import Vue from ‘vue‘ import Vuex from ‘vuex‘ Vue.use(Vuex) const state = { // val: ‘1234‘ } export default new Vuex.Store({ state })
<template> <div> <div>组件D --> 接收B数据 {{value}}</div> </div> </template> <script> export default { computed: { value() { return this.$store.state.val // 调用store中的state } } } </script>
(1.2) mapMutations 辅助函数
<template> <div> <div>组件D --> 接收state数据 {{value}}</div> </div> </template> <script> import {mapState} from ‘Vuex‘ export default { computed: { ...mapState({ value: state => state.val }) } } </script>
(2)MUTATION改变store中状态的唯一方法
eg:
import Vue from ‘vue‘ import Vuex from ‘vuex‘ Vue.use(Vuex) // console.log(Vuex) const state = { val: ‘1234‘ } const mutations = { setVal(state,value) { state.val = value; } } export default new Vuex.Store({ state, mutations })
<template> <div> <div>组件E数据{{value}}</div> <input type="text" v-model=‘value‘> </div> </template> <script> export default { data() { return { value:‘‘ } }, watch: { value() { this.$store.commit(‘setVal‘,this.value) // 通过commit触发setVal来改变state的数据 } } } </script>
**(2.2)**mapMutations 辅助函数
<template> <div> <div>组件E数据{{value}}</div> <input type="text" v-model=‘value‘> </div> </template> <script> import {mapMutations} from ‘vuex‘ export default { data() { return { value:‘‘ } }, methods: { ...mapMutations([‘setVal‘]) }, watch: { value() { this.setVal(this.value) } } } </script>
methods: { ...mapMutations({ setValue: ‘setVal‘ }) }
(3)ACTIONS 通过异步的触发mutation中的函数来改变state中的值
eg:
import Vue from ‘vue‘ import Vuex from ‘vuex‘ Vue.use(Vuex) const state = { val: ‘1234‘ } const mutations = { setVal(state,value) { state.val = value; } } const actions = { asynSetValue(ctx,value) { // ctx setTimeout(function () { ctx.commit(‘setVal‘,value) // ctx可以看作为store的镜像 }, Math.random()*500) } } export default new Vuex.Store({ state, mutations, actions }) <template> <div> <div>组件E数据{{value}}</div> <input type="text" v-model=‘value‘> </div> </template> <script> export default { data() { return { value:‘‘ } }, watch: { value() { this.$store.dispatch(‘asynSetValue‘,this.value) } } } </script>
const actions = { asynSetValue({commit},value) { // ctx setTimeout(function () { commit(‘setVal‘,value) }, Math.random()*500) } }
(4)GETTERS
import Vue from ‘vue‘ import Vuex from ‘vuex‘ Vue.use(Vuex) const state = { val: ‘1234‘ } const mutations = { setVal(state,value) { state.val = value; } } const getters = { newVal(state) { return state.val.split(‘‘).join(‘,‘) } } export default new Vuex.Store({ state, mutations, getters }) <template> <div class="wrapper"> <div>{{value}}</div> </div> </template> <script> export default { components: { componentE }, computed: { value() { return this.$store.getters.newVal } } } </script>
(4.1) mapGetters 辅助函数
<template> <div class="wrapper"> <div>组件C --> 接收getter数据 {{newVal}}</div> <component-e></component-e> </div> </template> <script> import componentE from ‘./componentE‘ import {mapGetters} from ‘Vuex‘ export default { components: { componentE }, computed: { ...mapGetters([‘newVal‘]) } } </script>
export default new Vuex.Store({ <br> state, ==》 数据 <br> mutations, ==》 定义方法,(同步的)改变 state 中的值 <br> actions, ==》行为,(异步的)触发 mutations 中的事件,从而改变 state 的值 <br> getters, ==》 派生值, <br> modules: { ==》 模块 <br> a: { <br> state, <br> mutations, <br> actions, <br> getters, <br> modules <br> } <br> } <br> })
先要在 index.js 中声明一个 state
const state = { val:‘1234‘ } computed: { val() { console.log(this.$store) return this.$store.state.val } }
先定义 mutations 函数
const mutations = { setVal(state, value) { state.val = value; } }
在监听函数中
watch:{ value(){ this.$store.commit(‘setVal‘,this.value) } }
ctx 可以看成是 store 的镜像,但又不完全一样
const actions = { asynSetValue(ctx, value) { setTimeout(()=>{ ctx.commit(‘setVal‘,value) }, Math.random() * 3000) } } watch:{ value(){ this.$store.dispatch(‘asynSetValue‘,this.value) } }
方法定义
const getters = { newVal(state) { return state.val.split(‘‘).join(‘,‘) } }
输出
computed:{ value() { return this.$store.getters.newVal } }
取值
watch:{ value(){ this.$store.commit(‘setVal‘,this.value) } }
取值: this.$store.state.val
取派生值: this.$store.getters.newVal
触发commit方法来触发setVal函数: this.$store.commit(‘setVal‘,value)
触发dispatch方法来触发asynSetValue函数: this.$store.dispatch(‘asynSetValue‘,value)
mapState,mapMutations,mapActions,mapGetters 这4中方法对应了上面4中扩展形式
使用之前要在组件中先引入
import {mapState} from ‘Vuex‘ // 解构的方式引入 computed: { ...mapState({ val: state => state.val }) }
const state = { val:‘1234‘ }
在组件中引入
import {mapMutations} from ‘vuex‘ methods:{ ...mapMutations([‘setVal‘]) }, watch:{ value(){ this.setVal(this.value) } }
import {mapGetters} from ‘vuex‘ computed:{ ...mapGetters({ newV:‘newVal‘ }) }
modules: { map: { namespaced: true, state: { title: ‘地图‘, url: ‘map.baidu.com‘ }, mutations: { updateVal(state, val) { console.log(‘map‘); state.title = val } }, actions: { _updateVal({commit}, val) { commit(‘updateVal‘, val) // 这里默认触发的是当前的updateVal, 如果想要触发外面的updateVal需要加上{root:true}字段 commit(‘updateVal‘, val{root:true}) } } }, new: { state: { title: ‘新闻‘, url: ‘new.baidu.com‘ } } }
在 modules 中定义的方法如果跟外面的同名,就会合并(低版本vue会报错);可以使用命名空间,
methods: { ...mapMutations([‘updateVal‘]), ...mapActions(‘map‘,[‘_updateVal‘]) // 使用命名空间之后就要在方法前写上模块名 }
标签:rand NPU 部署 tar 字段 改变 inpu data 镜像
原文地址:https://www.cnblogs.com/goff-mi/p/9392369.html