当前位置: 首页 > 知识库问答 >
问题:

如何使用vuex和vue路由器在后端和前端之间同步状态?

贺浩壤
2023-03-14

我正在使用vue-cli3和npm开发一个单页应用程序。

问题是:将名为counter的基本整数值(存储在vuex状态中)填充到前端(显示新值),该计数器在后端递增/递减。

递增/递减突变在两个组件(前端/后端)上都可以正常工作,但似乎突变在同一路由实例上不起作用:当递增/递减后端中的计数器时,值不会在前端更新,否则。

store.js:

包含需要在后端/前端之间同步的状态。

import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    counter: 10
  },
  mutations: {
    increment (state) {
      state.counter++
    },
    decrement (state) {
      state.counter--
    }
  }
})

index.js:

定义vue路由器必须提供的路由。

import Vue from 'vue'
import Router from 'vue-router'
import Frontend from '@/components/Frontend'
import Backend from '@/components/Backend'

Vue.use(Router)

export default new Router({
  routes: [
    {
      path: '/',
      name: 'Frontend',
      component: Frontend
    },
    {
      path: '/backend',
      name: 'Backend',
      component: Backend
    }
  ],
  mode: 'history'
})

主要的js:

初始化Vue实例并提供全局存储和路由器实例。

import Vue from 'vue'
import App from './App'
import router from './router'
import { sync } from 'vuex-router-sync'
import store from './store/store'

Vue.config.productionTip = false

sync(store, router)

new Vue({
  router,
  store,
  render: h => h(App)
}).$mount('#app')

前端。vue/后端。vue:

两者(前端/后端)在此使用相同的代码。他们使用状态计数器来显示和修改它。

<template>
  <div> Counter: {{ getCounter }}
    <br>
    <p>
      <button @click="increment">+</button>
      <button @click="decrement">-</button>
    </p>
  </div>
</template>

<script>
export default {
  name: 'Frontend',
  methods: {
    increment () {
      this.$store.commit('increment')
    },
    decrement () {
      this.$store.commit('decrement')
    }
  },
  computed: {
    getCounter () {
      return this.$store.state.counter
    }
  }
}
</script>

如果有人告诉我我遗漏了什么,或者我误解了vuex和vue路由器的概念,那就太棒了。

共有2个答案

南门鸿畴
2023-03-14

@data()中定义的sebikolon组件属性=

data: function () {
    return {
        counter: $store.state.counter,
    }
}

乐正翰
2023-03-14

只需从商店购买这两种组件的柜台。您不需要数据,因为存储已经是反应性的。

<template>
  <div> Counter: {{ counter }}
    <br>
    <p>
      <button @click="increment">+</button>
      <button @click="decrement">-</button>
    </p>
  </div>
</template>

<script>
import { mapState, mapMutations } from 'vuex';

export default {
  name: 'Frontend',
  methods: {
    ...mapMutations([
      'increment',
      'decrement',
    ])
  },
  computed: {
    ...mapState({
        counter: state => state.counter,
    })
  }
}
</script>

供参考:

  • mapState:https://vuex.vuejs.org/guide/state.html#the-mapstate-helper
  • mapMutations:https://vuex.vuejs.org/guide/mutations.html#committing-mutations-in-components
 类似资料:
  • 我已经使用Vue CLI创建了一个Vue3应用程序,用Vuex和路由器创建我的应用程序。应用程序运行良好。 注意:我遵循了这个有用的文档,用于Vue3的Vuexhttps://blog.logrocket.com/using-vuex-4-with-vue-3/ 要求现在我想更改我的Vue3应用程序,使其具有服务器端渲染支持(即SSR)。 我观看了关于使用Vue3创建SSR应用程序的精彩视频:ht

  • 我有以下Vuex商店(main.js): 我还为Vue路由器(routes.js)定义了以下路由: 我试图这样做,如果Vuex存储了对象,并且将属性设置为,则路由器会将用户重定向到登录页面。 我有这个: 问题是,我不知道如何从函数内部访问Vuex商店的对象。 我知道我可以在组件中使用来设置路由器保护逻辑,但这会使每个组件变得杂乱无章。我想在路由器级别集中定义它。

  • 调用第三方接口获取的用户信息。我想保存下来。然后再提供个查询用户信息的接口。 然后我再获取的时候赋值。 userInfo.setUserInfo(userinfo); 然后再提供个get接口 看着好像没问题。set的时候能打印到值。get的时候就没了。

  • 问题内容: 我一直在思考,我对客户端和服务器之间的路由感到困惑。假设我在将请求发送回Web浏览器之前使用ReactJS进行服务器端渲染,并使用react- router作为客户端路由在页面之间切换而不刷新为SPA。 我想到的是: 路线如何解释?例如,从首页()到帖子页面()的请求 路由在服务器端还是客户端去哪里? 它如何知道如何处理? 问题答案: 注意,此答案涵盖了React Router版本0.

  • 我想到的是: 路线是如何解释的?例如,从主页()到帖子页()的请求 路由在服务器端还是客户端? 它如何知道它是如何处理的?