Vuex 使用 v-model 配合 state的方法


Posted in Javascript onNovember 13, 2018

v-model 最好用的就是配合 data ?成 Two-way Binding,但若使用 Vuex 之後,是否?能使用 v-model 搭配 state ?? Two-way Binding 呢 ?

Version

Vue 2.5.17

Vuex 3.0.1

V-model vs. Data

HelloWorld.vue

<template>
 <div>
  <div>
   <input type="text" v-model="name">
  </div>
  <div>
   {{ name }}
  </div>
 </div>
</template>

<script>
/** data */  
const data = function() {
 return {
  name: '',
 };
};

export default {
 name: 'HelloWorld',
 data,
};
</script>

Vue 的 v-model ????法,直接? <input> ?定到 name data。

Value vs. Input

但若? name data 提升到 Vuex 的 name state 之後,就?]????瘟恕?/p>

Vuex ???的是 Unidirection Dataflow, state 只能被?取,要??入 state 必?靠 mutation ,因此 v-model ?o法直接??入 state 。

v-model 本?是 value property binding ? input event 的 syntatic sugar,因此可以回?w基本?幼鳎?褂 value ? input ???。

HelloWorld.vue

<template>
 <div>
  <div>
   <input type="text" :value="name" @input="onInputName">
  </div>
  <div>
   {{ name }}
  </div>
 </div>
</template>
<script>
import { mapState } from 'vuex';
/** computed */
const computed = mapState(['name']);
/** methods */
const onInputName = function(e) {
 this.$store.commit('setName', e.target.value);
};
const methods = {
 onInputName,
};
export default {
 name: 'HelloWorld',
 computed,
 methods,
};
</script>

第 4 行

<input type="text" :value="name" @input="onInputName">

? name ?定到 value ,? onInputName() ?定到 input event。

16 行

const computed = mapState(['name']);

? name state 建立 name computed。

19 行

const onInputName = function(e) {
 this.$store.commit('setName', e.target.value);
};

定? onInputName() ,??接收 input event,呼叫 setName mutations 修改 name state。

store.js

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

Vue.use(Vuex);

/** state */
const state = {
 name: '',
};
/** mutations */
const setName = (state, payload) => state.name = payload;
const mutations = {
 setName,
};
export default new Vuex.Store({
 strict: true,
 state,
 mutations,
});

很??实 Vuex ??法,由 setName mutation ??修改 name state。

????法?然可行,但似乎?适Я嗽? v-model 的特色,又必?走回?路使用 event

V-model vs. Computed with Setter

HelloWorld.vue

<template>
 <div>
  <div>
   <input type="text" v-model="name">
  </div>
  <div>
   {{ name }}
  </div>
 </div>
</template>
<script>
/** computed */
const name = {
 get() {
  return this.$store.state.name;
 },
 set(value) {
  this.$store.commit('setName', value);
 },
};
const computed = {
 name,
};
export default {
 name: 'HelloWorld',
 computed,
};
</script>

第 4 行

<input type="text" v-model="name">
v-model 回?砹耍???定的是 name computed,而不是 name data。

14 行

const name = {
 get() {
  return this.$store.state.name;
 },
 set(value) {
  this.$store.commit('setName', value);
 },
}

建立 name computed,?榱俗? v-model 能?作,特?e? name computed 加上 setter。

  • get() :??? name state 抓?料
  • set() :??呼叫 setName mutation ??入 state

透?有 setter 的 computed,我??就能??使用 v-model 了。

Conclusion

?然使用 value vs. input ??法也行,但 v-model vs. computed with setter ??法更??雅,???丈辖ㄗh用此

Sample Code

完整的?例可以在我的 GitHub 上找到

Reference

Vuex , Form Handling

总结

以上所述是小编给大家介绍的Vuex 使用 v-model 配合 state的方法 ,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
Javascript监视变量变化的方法
Jun 09 Javascript
JavaScript返回上一页的三种方法及区别介绍
Jul 04 Javascript
JavaScript实现添加及删除事件的方法小结
Aug 04 Javascript
js实现对ajax请求面向对象的封装
Jan 08 Javascript
request请求获取参数的实现方法(post和get两种方式)
Sep 27 Javascript
JavaScript与JQUERY获取元素的宽、高和位置
Feb 26 Javascript
JavaScript中最常见的三个面试题解析
Mar 04 Javascript
jQuery插件echarts实现的循环生成图效果示例【附demo源码下载】
Mar 04 Javascript
js移动端图片压缩上传功能
Aug 18 Javascript
微信小程序错误this.setData报错及解决过程
Sep 18 Javascript
微信小程序实现多选框全选与反全选及购物车中删除选中的商品功能
Dec 17 Javascript
利用js canvas实现五子棋游戏
Oct 11 Javascript
vue代码分割的实现(codesplit)
Nov 13 #Javascript
详解vuex之store拆分即多模块状态管理(modules)篇
Nov 13 #Javascript
JS获取当前时间的实例代码(昨天、今天、明天)
Nov 13 #Javascript
checkbox在vue中的用法小结
Nov 13 #Javascript
React父子组件间的传值的方法
Nov 13 #Javascript
JS中使用cavas截图网页并解决跨域及模糊问题
Nov 13 #Javascript
详解如何用typescript开发koa2的二三事
Nov 13 #Javascript
You might like
str_replace只替换一次字符串的方法
2013/04/09 PHP
PHP随机数函数rand()与mt_rand()的讲解
2019/03/25 PHP
用php实现分页效果的示例代码
2020/12/10 PHP
Jsonp 跨域的原理以及Jquery的解决方案
2010/05/18 Javascript
Javascript模块化编程(三)require.js的用法及功能介绍
2013/01/17 Javascript
javascript 10进制和62进制的相互转换
2014/07/31 Javascript
实例分析js和C#中使用正则表达式匹配a标签
2014/11/26 Javascript
使用jQuery和Bootstrap实现多层、自适应模态窗口
2014/12/22 Javascript
jQuery.trim() 函数及trim()用法详解
2015/10/26 Javascript
Bootstrap每天必学之缩略图与警示窗
2015/11/29 Javascript
AngularJS中的Directive实现延迟加载
2016/01/25 Javascript
jquery if条件语句的写法
2016/05/19 Javascript
ThinkJS中如何使用MongoDB的CURD操作
2016/12/13 Javascript
Bootstrap进度条学习使用
2017/02/09 Javascript
JavaScript正则表达式简单实用实例
2017/06/23 Javascript
javascript 判断用户有没有操作页面
2017/10/17 Javascript
详解vue2.0+vue-video-player实现hls播放全过程
2018/03/02 Javascript
JS利用prototype给类添加方法操作详解
2019/06/21 Javascript
Vue使用CDN引用项目组件,减少项目体积的步骤
2020/10/30 Javascript
[02:50]【扭转乾坤,只此一招】DOTA2永雾林渊版本开启新篇章
2020/12/22 DOTA
一个计算身份证号码校验位的Python小程序
2014/08/15 Python
python通过floor函数舍弃小数位的方法
2015/03/17 Python
python3批量删除豆瓣分组下的好友的实现代码
2016/06/07 Python
基于循环神经网络(RNN)的古诗生成器
2018/03/26 Python
Selenium(Python web测试工具)基本用法详解
2018/08/10 Python
Python3 无重复字符的最长子串的实现
2019/10/08 Python
Mac 使用python3的matplot画图不显示的解决
2019/11/23 Python
pytorch 批次遍历数据集打印数据的例子
2019/12/30 Python
Python通过TensorFLow进行线性模型训练原理与实现方法详解
2020/01/15 Python
ALDI奥乐齐官方海外旗舰店:德国百年超市
2017/12/27 全球购物
本科毕业生求职自荐信
2014/02/03 职场文书
班级团队活动方案
2014/08/14 职场文书
管理岗位竞聘演讲稿
2014/08/18 职场文书
感恩老师演讲稿600字
2014/08/28 职场文书
物价局领导班子四风问题整改措施
2014/10/26 职场文书
2016年精神文明建设先进个人事迹材料
2016/02/29 职场文书