Vue/Vuex: 如何用Vuex代替传数据的emitting函数?
Vue/Vuex: How to use Vuex to replace emitting functions that pass data?
我正在考虑将 Vuex 添加到我的项目中以保持状态井井有条。我如何使用 Vuex 替换发出的函数,就像下面的示例一样? Vuex 能否完全取代发射的需要?
Parent
<child-component @handleUpdatePost="updatePost"></child-component>
methods: {
updatePost(person) {
console.log(person)
//do something
}
}
Child
<button @click="clickButton"></button>
methods: {
clickButton() {
let person = "foo"
this.$emit('handleUpdatePost', person)
}
}
我创建了一个简单的 Vue 2 CLI 应用程序,作为如何用 Vuex 替换发射场景的示例。
商店:
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
const store = new Vuex.Store({
state: {
message: 'Initial message'
},
mutations: {
updateMessage(state, newMessage) {
state.message = newMessage;
}
}
})
export default store;
Parent.vue
<template>
<div class="parent">
<h2>Parent.vue</h2>
<div class="row">
<div class="col-md-6">
<label class="font-weight-bold">Message from Vuex: </label>
<span>{{ message }}</span>
</div>
</div>
<hr>
<child />
</div>
</template>
<script>
import Child from './Child.vue'
export default {
components: {
Child
},
computed: {
message() {
return this.$store.state.message;
}
}
}
</script>
<style scoped>
label {
margin-right: 0.5rem;
}
</style>
Child.vue
<template>
<div class="child">
<h3>Child.vue</h3>
<div class="row">
<div class="col-md-6">
<form @submit.prevent="submitMessage">
<div class="form-group">
<label>New Message:</label>
<input type="text" class="form-control" v-model="newMessage">
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
</div>
</div>
</div>
</template>
<script>
export default {
data() {
return {
newMessage: ''
}
},
methods: {
submitMessage() {
this.$store.commit('updateMessage', this.newMessage);
this.newMessage = '';
}
}
}
</script>
我正在考虑将 Vuex 添加到我的项目中以保持状态井井有条。我如何使用 Vuex 替换发出的函数,就像下面的示例一样? Vuex 能否完全取代发射的需要?
Parent
<child-component @handleUpdatePost="updatePost"></child-component>
methods: {
updatePost(person) {
console.log(person)
//do something
}
}
Child
<button @click="clickButton"></button>
methods: {
clickButton() {
let person = "foo"
this.$emit('handleUpdatePost', person)
}
}
我创建了一个简单的 Vue 2 CLI 应用程序,作为如何用 Vuex 替换发射场景的示例。
商店:
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
const store = new Vuex.Store({
state: {
message: 'Initial message'
},
mutations: {
updateMessage(state, newMessage) {
state.message = newMessage;
}
}
})
export default store;
Parent.vue
<template>
<div class="parent">
<h2>Parent.vue</h2>
<div class="row">
<div class="col-md-6">
<label class="font-weight-bold">Message from Vuex: </label>
<span>{{ message }}</span>
</div>
</div>
<hr>
<child />
</div>
</template>
<script>
import Child from './Child.vue'
export default {
components: {
Child
},
computed: {
message() {
return this.$store.state.message;
}
}
}
</script>
<style scoped>
label {
margin-right: 0.5rem;
}
</style>
Child.vue
<template>
<div class="child">
<h3>Child.vue</h3>
<div class="row">
<div class="col-md-6">
<form @submit.prevent="submitMessage">
<div class="form-group">
<label>New Message:</label>
<input type="text" class="form-control" v-model="newMessage">
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
</div>
</div>
</div>
</template>
<script>
export default {
data() {
return {
newMessage: ''
}
},
methods: {
submitMessage() {
this.$store.commit('updateMessage', this.newMessage);
this.newMessage = '';
}
}
}
</script>