最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 使用Harlem代替VueX作为Vue3.x的统一状态管理

    正文概述 掘金(HIPI)   2021-03-08   514

    Vuex 的调试

    目前只有一个createLogger API 可以在控制台调试,

    import { createStore, createLogger } from "vuex";
    
    export default createStore({
      //...
      plugins: [createLogger()],
    });
    

    但是,这会使 控制台看上去个很糟糕! 当多个状态更新时,已经不能快速有效获取自己的信息

    使用Harlem代替VueX作为Vue3.x的统一状态管理

    但是 在这篇 Issues 发现了另一个好东西 ---》 harlem ,也是这篇文章介绍的重点

    harlem

    Harlem 就是一个用于创建、读取和状态变更等简单功能的API。它的核心只是使用了 vue3自带的 reactivecomputeds API。这意味着如果你知道如何使用 Vue3,你就会知道如何使用 Harlem。

    因为并没有引入其他的库(只是 Vue),所有它足够小,关键还提供了 vue 开发扩展的支持。

    ** 接下来 来看看如何使用 **

    使用 harlem

    1. 安装

    npm install @harlem/core
    

    2. Vue 应用实例注册 Harlem 插件。

    import App from "./app.vue";
    import Harlem from "@harlem/core";
    
    createApp(App).use(Harlem).mount("#app");
    

    3. 创建 Store ,并写出 getters/mutations

    import { createStore } from "@harlem/core";
    
    const STATE = {
      firstName: "John",
      lastName: "Smith",
    };
    
    const { getter, mutation, ...store } = createStore("user", STATE);
    
    export const state = store.state;
    
    export const fullName = getter(
      "fullname",
      (state) => `${state.firstName} ${state.lastName}`
    );
    
    export const setFirstName = mutation("setFirstName", (state, payload) => {
      state.firstName = payload || "";
    });
    
    export const setLastName = mutation("setLastName", (state, payload) => {
      state.lastName = payload || "";
    });
    

    4. 在应用中使用

    <template>
        <div class="app">
            <h1>Hello {{ fullName }}</h1>
            <input type="text" v-model="firstName" placeholder="First name">
            <input type="text" v-model="lastName" placeholder="Last name">
        </div>
    </template>
    
    <script lang="ts">
    import {
        defineComponent,
        computed
    } from 'vue';
    
    import {
        state,
        fullName,
        setFirstName,
        setLastName
    } from './stores/user';
    
    export default defineComponent({
    
        setup() {
            const firstName = computed({
                get: () => state.firstName,
                set: setFirstName
            });
    
            const lastName = computed({
                get: () => state.lastName,
                set: setLastName
            });
    
            return {
                firstName,
                lastName,
                fullName
            };
        }
    
    });
    </script>
    

    开发扩展使用

    import App from "./app.vue";
    import Harlem from "@harlem/core";
    
    import createDevtoolsPlugin from "@harlem/plugin-devtools";
    
    import { createApp } from "vue";
    
    function start() {
      let plugins = [];
    
      if (process.env.NODE_ENV === "development") {
        plugins.push(
          createDevtoolsPlugin({
            label: "State",
          })
        );
      }
    
      return createApp(App)
        .use(Harlem, {
          plugins,
        })
        .mount("#app");
    }
    
    start();
    

    使用Harlem代替VueX作为Vue3.x的统一状态管理

    已上抄录于 harlem 官方文档,可以自行查看

    总结

    在我自己切换使用以来 ,几乎毫无学习成本,而且极大的缩减了应用大小,大家赶紧试试吧。(如果是老项目改造,还是推荐第一种方法)


    起源地下载网 » 使用Harlem代替VueX作为Vue3.x的统一状态管理

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元