前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Vuex 和 v-model 的水乳交融

Vuex 和 v-model 的水乳交融

作者头像
kyrieliu
发布2020-07-01 16:38:13
8910
发布2020-07-01 16:38:13
举报
文章被收录于专栏:前端搬砖日记前端搬砖日记

今天被问到一个问题:Vuex 中的数据如何用 v-model 绑定到组件?

Vuex 的基本原则

我们知道,Vuex 的规则是:

对于 state 的变更,同步用 commit / mutations,异步用 dispatch / actions

对于 v-model 常用的场景,就是表单的输入输出,通常可以定义为一种同步的数据变更,即采用 commit / mutations 的方式。

v-model 是什么?

v-model 是语法糖。

  1. 通过 v-bind 绑定数据
  2. 通过 input 或 change 事件传递变更的数据

Solution

经过上面两部分的梳理,就很容易把两者相结合起来。

代码语言:javascript
复制
<input :value="message" @input="updateMessage" />
代码语言:javascript
复制
computed: {
    ...mapState({
        message: state => state.message
    })
},
methods: {
    updateMessage (ev) {
        this.$store.commit('updateMessage', ev.target.value);
    }
}
代码语言:javascript
复制
mutations: {
    updateMessage (state, message) {
        state.message = message;
    }
}

Better Solution

代码语言:javascript
复制
<input v-model="message" />
代码语言:javascript
复制
computed : {
    message: {
        get() {
            return this.$store.state.message;
        },
        set(value) {
            this.$store.commit('updateMessage', value);
        }
    }
}

The Last and the Most Important

对于没有第一时间答上来这个问题,事后想想还是很羞耻的,毕竟曾经在工作中解决过这类问题。暴露出来的事情是:缺乏总结,对于一种或一类问题,可以对它的解决方案进行提炼和思考,以至于下一次再碰到的时候不会出现这种似曾相识但又很陌生的尴尬感。 搜索引擎是个好产品,它可以帮助人们解决各种各样的问题。但如果太依赖它的话,人会逐渐失去独立思考和解决问题的能力。 如果要成为一个好的工程师,在解决问题的同时,要定期复盘,这样才能得到真正的成长。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-12-14F,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Vuex 的基本原则
  • v-model 是什么?
  • Solution
  • Better Solution
  • The Last and the Most Important
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档