关于vue中vuex的思考,在其它js文件里想要使用vuex中的数据

src/strore/index.js

import { createStore } from "vuex";
// 导入持久化插件
import createPersistedstate from "vuex-persistedstate";
import user from "./modules/user";
import cart from "./modules/cart";
import cartegory from "./modules/category";
export default createStore({
  // 分模块
  modules: {
    user,
    cart,
    cartegory,
  },
  plugins: [
    createPersistedstate({
      key: "erabbit-client-pc-store",
      paths: ["user", "cart"],
    }),
  ],
});

App.vue

<template>
  <div id="container">
    <!-- 1、使用A模块的state数据 -->
    <p>{{ $store.state.moduleA.username }}</p>
    <!-- 2、使用A模块的getters数据 -->
    <p>{{ $store.getters.newName }}</p>

    <!-- 1、使用B模块的state数据 -->
    <p>{{ $store.state.moduleB.username }}</p>
    <!-- 2、使用B模块的getters数据 $store.getters['模块名/计算属性']-->
    <p>{{ $store.getters["moduleB/newName"] }}</p>
    <button @click="mutationsFn">mutationsFn</button>
    <button @click="actionsFn">actionsFn</button>
    <p>{{ $store.state.moduleB.age }}</p>
  </div>
</template>
<script>
import { useStore } from "vuex";
export default {
  name: "App",
  setup() {
    // userStore可以拿到vuex仓库实例
    const store = useStore();
    // 1、使用moduleA模块state的数据
    console.log(store);
    console.log(store.state.moduleA.username); // moduleA
    // 2、使用moduleA模块getters的数据
    console.log(store.getters.newName); // moduleA!!!!

    // 1、使用moduleB模块getters的数据
    console.log(store.getters["moduleB/newName"]); // moduleB???

    const mutationsFn = () => {
      // 提交B模块的更改
      store.commit('moduleB/updateName')
    };
    const actionsFn = () => {
      // 传参用法
      store.dispatch("moduleB/updateName", 6)
    };
    return {
      mutationsFn,
      actionsFn,
    };
  },
};
</script>
<style lang='less' scoped>
</style>

此时有一个需求,vuex的user模块里存储了用户的一些信息,其中的token想要在请求拦截器里使用(vuex我已经实现了数据持久化)

思考:
createStore 于 useStore 可能创造的是同一个实例。

1、因此可以在request.js里引入useStore方法,然后来访问user模块的一些用户数据

2、也可以直接导入 store/index.js 直接使用store。

// 1. 创建一个新的axios实例
// 2. 请求拦截器,如果有token进行头部携带
// 3. 响应拦截器:1. 剥离无效数据  2. 处理token失效
// 4. 导出一个函数,调用当前的axsio实例发请求,返回值promise
import axios from 'axios'
import store from '@/store';
// 导出基准地址,原因其他地方也有可能用到基准路径,eg: 图片
export const baseURL = 'http://pcapi-xiaotuxian-front-devtest.itheima.net/'
const API = axios.create({
  baseURL: baseURL,
  timeout: 5000
});
// Add a request interceptor
API.interceptors.request.use(
  function (config) {
    // 拦截业务逻辑
    const { profile } = store.state.user
    if(profile.token) {
      config.headers.Authorization = `Bearer${profile.token}`
    }
    return config;
  },
  function (error) {
    return Promise.reject(error);
  }
);
Vue使用Vuex,你需要按照以下步骤进行设置: 1. 安装Vuex:在项目根目录下执行以下命令安装Vuex依赖: ``` npm install vuex ``` 2. 创建store:在项目的src目录下创建一个名为store的文件夹,然后在该文件创建一个名为index.js文件。index.js文件Vuex的核心文件,用于创建和配置store。 3. 在index.js导入VueVuex,并使用Vue.use(Vuex)注册Vuex插件。然后创建一个新的Vuex store实例: ```javascript import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) const store = new Vuex.Store({ // 在这定义你的state、mutations、actions等 }) export default store ``` 4. 在main.js导入store并将其作为Vue实例的一个选项: ```javascript import Vue from 'vue' import App from './App.vue' import store from './store' new Vue({ store, render: h => h(App) }).$mount('#app') ``` 5. 在store文件创建state、mutations和actions等模块,以及需要存储的数据和对数据进行操作的方法。例如,你可以在index.js定义一个名为counter的模块: ```javascript const counter = { state: { count: 0 }, mutations: { increment(state) { state.count++ }, decrement(state) { state.count-- } }, actions: { increment(context) { context.commit('increment') }, decrement(context) { context.commit('decrement') } } } export default new Vuex.Store({ modules: { counter } }) ``` 6. 现在你可以在Vue组件使用Vuex了。你可以通过计算属性computed和方法methods来访问store的状态或触发mutations和actions。例如,你可以在组件使用以下代码: ```javascript <template> <div> <p>{{ count }}</p> <button @click="increment">Increment</button> <button @click="decrement">Decrement</button> </div> </template> <script> export default { computed: { count() { return this.$store.state.counter.count } }, methods: { increment() { this.$store.dispatch('counter/increment') }, decrement() { this.$store.dispatch('counter/decrement') } } } </script> ``` 这样就完成了在Vue使用Vuex的设置。你可以根据自己的需求来定义和使用Vuex的模块、状态、mutations和actions等。希望对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南朝听月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值