javascript - 更改存储中的值后如何调用组件中的函数?
问题描述
我有一个包含一些值和两个组件的商店。当我需要在更改红色值后调用函数时,第一个组件是它的范围滑块,第二个组件是它的组件。
在第一个组件中,我更改滑块值并将其添加到 vuex 存储中。
state: {
value: 0,
rgbColors: {
red: 0
}
},
我怎么理解我需要使用store.subscribe.watch.rgbColors.red
or store.watch.rgbColors.red
,它是正确的?
如果它正确,如何在更改值后调用某些函数?
解决方案
store.subscribe
订阅突变器。Ala:如果您调用this.$store.commit('myMutator', payload)
,您的订阅者函数将使用myMutator
and调用payload
。这不是你想要的。
store.watch
将监视您定义的状态的某些部分,但它的主要缺点是您确实需要手动取消监视。我相信你会这样使用它:
const unWatchFn = store.watch(
(state) => state.rgbColors.red,
(newRed) => {
console.log(newRed)
}
);
// And sometime later
unWatchFn()
您通常不想在 Vue 中使用实际的观察者,因为通过计算属性计算事物会自动使计算变量保持最新。如果您需要使用观察程序,请在实际组件上使用它们,以便它们自动被删除,并且不会导致内存泄漏或奇怪的错误。无论哪种情况,您都需要在 store 模块中创建一个 getter。然后在这个 getter 上的组件中创建一个计算属性或一个观察者。
// store.js
export default {
state: {
rgbColors: {
red: 0,
green: 0,
blue: 0
}
},
getters: {
color(state) {
return state.rgbColors;
}
},
mutations: {
setColor(state, { red, green, blue }) {
state.rgbColors.red = red;
state.rgbColors.green = green;
state.rgbColors.blue = blue;
}
}
};
// SomeComponent.vue
<script>
import { mapGetters } from "vuex";
export default {
name: "App",
computed: {
...mapGetters(["color"]),
styling() {
const { red, green, blue } = this.color;
return {
"background-color": `rgb(${red}, ${green}, ${blue})`
};
}
},
watch: {
color: {
deep: true,
handler(newColor) {
console.log("Oh, look, a new color!", newColor);
}
}
},
methods: {
setColor(red, green, blue) {
this.$store.commit("setColor", {
red,
green,
blue
});
}
}
};
</script>
推荐阅读
- java - 如何修复此错误:类中的构造函数不能应用于给定类型
- macos - 我的 VoiceOver 指挥官没有正确执行我的脚本
- android - 如何将包含内容的私有文件夹复制到 android q 及更高版本中的公共目录?
- linux - 如何在Linux上一次更改多个文件夹名称
- shell - 这个 if 语句是如何工作的?(外壳脚本)
- ruby-on-rails - 在 Ruby on Rails 中显示表单结果而无需重新加载
- python - 如何在pytorch中钳制神经元的输出
- python - 尝试连接到本地 mysql 数据库但收到以下错误 pwwee
- r - 在闪亮中使用 selectInput 绘制不同的回归线
- javascript - 存储卡游戏点击事件无法在移动设备上正常运行,但在计算机上运行良好