【发布时间】:2020-11-17 14:37:33
【问题描述】:
来自 React,我习惯于“控制” html 元素值和事件的概念。
我希望对 VueJS 做同样的事情。
我有,一个输入:
<input :value="foo" @input="changeFoo" pattern="[a-zA-Z0-9]+">
来自我的 VueX 商店的计算值:
...mapState({
foo: (state) => state.foo,
}),
一种向我的 VueX 状态提交突变的方法
changeFoo(e) { this.$store.commit('CHANGE_FOO', e.target)}
如果正则表达式匹配,则更新状态的突变
CHANGE_FOO(state, target) {
if (target.checkValidity()) {
state.foo = target.value;
}
},
什么有效:
- 我的 VueX 状态更新
- 我的输入更新
- 如果checkValidity返回
false,则商店没有更新
什么不起作用:
- 即使商店没有更新,
<input />的值也会发生变化...我想要的是将单一事实源绑定到我的<input />组件
【问题讨论】:
-
“即使store没有更新,
<input />的值也会发生变化”——它是如何变化的? -
您可能需要在不同的时候阻止默认行为,例如在有效性检查失败时。
-
或者,尝试阻止
@keypress的默认值,这可能是阻止某些字符被输入的最简单方法。 -
实际上,
@keypress为我工作,我只是尝试过 :-) 如果您需要一些指针,请告诉我。 -
我添加了我的变体。只是对您的答案的补充。他们都是伟大的! :-)