store文件夹 vue_【vue】vue +element 搭建项目,vuex中的store使用

本文介绍了如何在Vue项目中设置和使用Vuex Store,包括状态管理、getter、mutation和action的运用。通过创建store.js(后改为index.js)并引入到main.js中,展示了如何初始化state和commit mutation。此外,还演示了如何组织模块化store,通过在modules文件夹下创建practice.js来管理特定模块的状态,并在getters.js中定义计算属性。最后,展示了在组件中如何使用store-getter来获取和操作状态。
摘要由CSDN通过智能技术生成

概述:

每一个 Vuex 应用的核心就是 store(仓库)。“store”基本上就是一个容器,它包含着你的应用中大部分的状态 (state)。Vuex 和单纯的全局对象有以下两点不同:

Vuex 的状态存储是响应式的。当 Vue 组件从 store 中读取状态的时候,若 store 中的状态发生变化,那么相应的组件也会相应地得到高效更新。

你不能直接改变 store 中的状态。改变 store 中的状态的唯一途径就是显式地提交 (commit) mutation。这样使得我们可以方便地跟踪每一个状态的变化,从而让我们能够实现一些工具帮助我们更好地了解我们的应用。

store中 state为属性

store中 getter为计算属性

store中 mutation用于更改状态mutation必须是同步函数。

采用store.commit方法触发

store中的action类似于mutation,

Action 提交的是 mutation,而不是直接变更状态。

Action 可以包含任意异步操作。

Action 通过 store.dispatch 方法触发

应用:

1.依赖安装

npm install vuex --save

2.在src目录下新建文件夹 store,在该文件夹下创建store.js(此用法有报错,见下)

store.js

import Vue from "vue";

import Vuex from "vuex";

Vue.use(Vuex);

const store = new Vuex.Store({

state: {

count: 0

},

mutations: {

increment(state) {

state.count++

}

}

})

export default store

main.js

import Vue from 'vue'

import App from './App'

import router from './router'

import ElementUI from 'element-ui'

import 'element-ui/lib/theme-chalk/index.css'

import store from './store'

Vue.config.productionTip = false

Vue.use(ElementUI);

new Vue({

router,

store,

template: '',

components: { App },

}).$mount('#app')

效果:(./store in ./src/main.js)

ca0c18130b331cad6f93e5952f795f2b.png

解决方案:将store.js更名为index.js

index.vue

home

export default {

name:'home',

created(){

this.$store.commit('increment');

console.log(this.$store.state.count);

},

}

效果:

a67284663a81ce04a8aaf091bd5840d4.png

3.store用法2

在store文件夹下新建 一个名为modules文件夹,在此文件夹下创建practice.js

practice.js

/**

* 用于学习store

*/

const practice = {

state: {

count: 0

},

mutations: {

increment(state) {

state.count++

}

},

}

export default practice

stroe文件下创建getters.js

const getters = {

practice_count: state => state.practice.count,

};

export default getters

store文件夹下创建index.js

import Vue from "vue";

import Vuex from "vuex";

import practice from './modules/practice';

import getters from './getters';

Vue.use(Vuex);

const store = new Vuex.Store({

modules: {

practice

},

getters

});

export default store

store.vue

store-getter用法

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是示例代码: 1. 在 src 目录下创建一个名为 data 的文件夹,在该文件夹内创建一个名为 data.json 的文件,用于存放数据。 2. 在 main.js 引入相关库: ```javascript import Vue from 'vue' import App from './App.vue' import Vuex from 'vuex' import VueRouter from 'vue-router' import ElementUI from 'element-ui' import 'element-ui/lib/theme-chalk/index.css' import axios from 'axios' Vue.prototype.$axios = axios Vue.config.productionTip = false Vue.use(Vuex) Vue.use(VueRouter) Vue.use(ElementUI) ``` 3. 在 store.js 定义 Vuex 的状态管理: ```javascript import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) const store = new Vuex.Store({ state: { data: [] // 存放数据的数组 }, mutations: { setData(state, data) { state.data = data }, addData(state, newData) { state.data.push(newData) }, deleteData(state, id) { const index = state.data.findIndex(item => item.id === id) state.data.splice(index, 1) }, updateData(state, newData) { const index = state.data.findIndex(item => item.id === newData.id) state.data.splice(index, 1, newData) } }, actions: { async fetchData({ commit }) { const response = await axios.get('/data/data.json') commit('setData', response.data) }, addData({ commit }, newData) { commit('addData', newData) }, deleteData({ commit }, id) { commit('deleteData', id) }, updateData({ commit }, newData) { commit('updateData', newData) } } }) export default store ``` 4. 在 router.js 定义路由: ```javascript import Vue from 'vue' import VueRouter from 'vue-router' import Home from './views/Home.vue' import Data from './views/Data.vue' import AddData from './views/AddData.vue' import EditData from './views/EditData.vue' Vue.use(VueRouter) const routes = [ { path: '/', name: 'home', component: Home }, { path: '/data', name: 'data', component: Data }, { path: '/data/add', name: 'addData', component: AddData }, { path: '/data/edit/:id', name: 'editData', component: EditData } ] const router = new VueRouter({ mode: 'history', base: process.env.BASE_URL, routes }) export default router ``` 5. 在 App.vue 使用 ElementUI 组件: ```html <template> <div id="app"> <el-header> <el-menu :default-active="activeIndex" class="el-menu-demo" mode="horizontal" @select="handleSelect"> <el-menu-item index="/">首页</el-menu-item> <el-menu-item index="/data">数据</el-menu-item> </el-menu> </el-header> <el-main> <router-view></router-view> </el-main> </div> </template> <script> export default { name: 'app', computed: { activeIndex() { return this.$route.path } }, methods: { handleSelect(index) { this.$router.push(index) } } } </script> ``` 6. 在 Data.vue 显示数据列表,并实现删除操作: ```html <template> <div> <el-table :data="data" style="width: 100%"> <el-table-column prop="id" label="ID"></el-table-column> <el-table-column prop="name" label="姓名"></el-table-column> <el-table-column prop="age" label="年龄"></el-table-column> <el-table-column label="操作"> <template slot-scope="scope"> <el-button type="text" @click="handleEdit(scope.row)">编辑</el-button> <el-button type="text" @click="handleDelete(scope.row.id)">删除</el-button> </template> </el-table-column> </el-table> <el-button type="primary" @click="handleAdd">添加</el-button> </div> </template> <script> export default { name: 'data', computed: { data() { return this.$store.state.data } }, methods: { handleEdit(row) { this.$router.push(`/data/edit/${row.id}`) }, handleDelete(id) { this.$confirm('确定删除该数据?', '提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => { this.$store.dispatch('deleteData', id) this.$message({ type: 'success', message: '删除成功!' }) }).catch(() => {}) }, handleAdd() { this.$router.push('/data/add') } }, created() { this.$store.dispatch('fetchData') } } </script> ``` 7. 在 AddData.vue 实现添加操作: ```html <template> <div> <el-form :model="formData" label-width="80px"> <el-form-item label="姓名"> <el-input v-model="formData.name"></el-input> </el-form-item> <el-form-item label="年龄"> <el-input v-model.number="formData.age"></el-input> </el-form-item> <el-form-item> <el-button type="primary" @click="handleAdd">添加</el-button> </el-form-item> </el-form> </div> </template> <script> export default { name: 'addData', data() { return { formData: { name: '', age: '' } } }, methods: { handleAdd() { const newData = { ...this.formData, id: Date.now() } this.$store.dispatch('addData', newData) this.$message({ type: 'success', message: '添加成功!' }) this.$router.push('/data') } } } </script> ``` 8. 在 EditData.vue 实现编辑操作: ```html <template> <div> <el-form :model="formData" label-width="80px"> <el-form-item label="姓名"> <el-input v-model="formData.name"></el-input> </el-form-item> <el-form-item label="年龄"> <el-input v-model.number="formData.age"></el-input> </el-form-item> <el-form-item> <el-button type="primary" @click="handleUpdate">更新</el-button> </el-form-item> </el-form> </div> </template> <script> export default { name: 'editData', data() { return { formData: { id: '', name: '', age: '' } } }, methods: { handleUpdate() { this.$store.dispatch('updateData', this.formData) this.$message({ type: 'success', message: '更新成功!' }) this.$router.push('/data') } }, created() { const id = this.$route.params.id const data = this.$store.state.data.find(item => item.id === Number(id)) this.formData = data } } </script> ``` 以上就是一个简单的 Vue 前端实现增删改查的示例。需要注意的是,以上代码仅供参考,实际应用需要根据具体需求进行修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值