软件开发定制定制vue3使用vuex实现页面实时更新数据(setup)

软件开发定制定制我项目中使用ws获取数据,软件开发定制定制因为数据是不断更新的,vue页面只更新一次就不更新了,然后暂时只能想到vuex来保存更新状态,页面数据实现实时更新。下面是我测试时用的数据,没有用ws,用的是定时器模拟定时发送数据。
1.项目引入vue

npm i vuex
  • 1

2.main.js引入vuex

import { createApp } from 'vue'import './style.css'import App from './App.vue'//vueximport store from './store/index.js'import * as echarts from 'echarts'const app = createApp(App)// 全局挂载echartscreateApp(App).config.globalProperties.$echarts = echartscreateApp(App).use(store).mount('#app')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

3.新建store文件夹
index.js里写vuex

import { createStore } from 'vuex'const store = createStore({    state: {        iotData: {},        count: 0,    },    getters: {        getStateCount: function (state) {            console.log('想发火啊');            return state.iotData;        }    },    mutations: {        addCount(state, payload) {            state.count += payload        },        setIOTData(state, data) {            state.iotData = data            console.log('setIOTData方法', state.iotData);        },        updateIOTTagConfig(state, data) {            //重点,要不然页面数据不更新            state.iotData=null            state.iotData = data            console.log(state.iotData, '进入mutations');        },    },    actions: {        asyncAddStoreCount(store, payload) { // 第一个参数是vuex固定的参数,不需要手动去传递            store.commit("addCount", payload)        },        asyncupdateIOTTagConfig({ commit, state }, data) {            commit('updateIOTTagConfig', data)        },    },    modules: {    }})export default store
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45

3.在传输数据的页面引入vuex (api.js)
(注意,这里我用的是定时器,另外不要在意这么多方法传这个数组,你也可以就一个方法里使用vuex,我这个就是测试写的)

let timerimport  store  from "../store/index";export function myStopEcharts() {    clearTimeout(timer)}export function startEcharts() {     timer = setInterval(() => {        var ydata1 = []        for (let i = 0; i < 1; i++) {            ydata1.push({ 'id': Math.round(Math.random() * 20), 'serialNumber': 2001, 'time': 2022 })        }        jj(ydata1)           }, 2000)} function jj(ydata1) {    const messageList = ydata1    hh(messageList)}function hh(messageList) {    runExit(messageList)}function runExit(message) {    exit(message)} var exitArr = []function exit(data) {       exitArr.push(...data)    if (exitArr.length > 20) {         exitArr.splice(0,17)        // console.log(s,exitArr,'pos');    }     store.dispatch('asyncupdateIOTTagConfig',exitArr)}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

4.渲染页面

<template>  {{name}}   <!-- <h1>vuex中的数据{{ store.state.count }}</h1>  <button @click="changeStoreCount">改变vuex数据</button>  <button @click="asyncChangeStoreCount">异步改变vuex数据</button> -->  <echarts></echarts></template><script>import { defineComponent, computed,ref, watch, toRaw ,onUnmounted} from "vue";import echarts from "./echarts.vue";import { useStore } from "vuex";import axios from "axios";export default defineComponent({  name: "HelloWorld",  components:{echarts},  setup() {    let {state, commit,getters} = useStore();    //使用计算属性动态拿到vuex的值    let name = computed(() => {return state.iotData})    // let UserInfoNoParams = computed(() => getters['getStateCount'])    console.log(name,state.iotData,'哎');    // commit("setIOTData", 1);    // const nextAge = computed({    //    get() {    //     return store.iotData    //   },    //   // set(value) {    //   //   console.log(value)  //  输出新修改的值    //   //   return age.value = value - 1    //   // }    // })    //监听数据     watch(name, (newVal, oldVal) => {      console.log(name,"改变的值", toRaw(newVal));      console.log("旧",oldVal);    },{immediate:true,deep: true});    // console.log(nextAge,'nextAge');    return {name};    //   const changeStoreCount = () => {    //     store.commit("addCount", 1)    //   }    //   const asyncChangeStoreCount = () => {    //     setTimeout(() => {    //  // asyncAddStoreCount是mutations中的方法,2是传递过去的数据    //  // 异步改变vuex用dispatch方法,这里用setTimeout模拟异步操作    //       store.dispatch("asyncAddStoreCount", 2)    //     }, 1000)    //   }    // return { store, changeStoreCount, asyncChangeStoreCount }  },});</script><style scoped></style>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53

代码可能有点乱,不过能实现效果。

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发