Vue.js 3.0 - 当存储 属性 值通过组合 API 发生变化时更新组件 UI
Vue.js 3.0 - Update component UI when store property value changes via composition API
我正在使用 Vue.js 3.0 编写 Vue.js 应用程序。我用它来学习作文 API。我不清楚的一件事是如何在更新存储值时有条件地更新我的组件 UI。为了演示我的问题,我创建了 this fiddle。代码详细在这里:
JavaScript
const store = {
state: reactive({
result = null
}),
generateNewValue() {
this.state.result = Math.floor(Math.random() * 10);
}
};
const MyApp = {
setup() {
return {
}
}
}
const myApp = Vue.createApp(MyApp)
myApp.component("banner",
{
template: '<button @click="onGenerateClick">generate</button>',
setup(props) {
console.log('setting up...');
},
methods: {
onGenerateClick() {
store.generateNewValue();
}
}
}
);
myApp.component("content", {
template: '<div><span>Content</span><button @click="onGenerateClick">generate</button></div>',
methods: {
onGenerateClick() {
store.generateNewValue();
}
}
});
myApp.mount('#my-vue')
HTML
<div id="my-vue">
<banner></banner>
<hr />
<content></content>
</div>
CSS
.even-banner {
background-color:navy;
color: #fff;
}
.even-content {
background-color:blue;
color: #fff;
}
.odd-banner {
background-color:maroon;
color:#fff;
}
.odd-content {
background-color:red;
color:#fff;
}
当我点击“生成”按钮时,生成了一个随机数。如果那个数字是偶数,我想设置 content
div 来使用 even
CSS class。如果是奇数,我要套用odd
CSSclass。不过我有点卡住了。
我的问题是,我可以在全局存储中成功设置状态值。但是,我不知道如何对组件中的 属性 值变化做出反应。我在 setup
函数中添加了一个 watchEffect
。但是,这并不能让我访问 individual 组件本身的状态。我试图在每个组件中找出一种方法来说“嘿,当商店中的 属性 发生变化时,像这样更新 UI。”。
我错过了什么?
您可以使用 computed()
道具来跟踪状态的值(例如,测试它是否均匀):
const MyApp = {
setup() {
return {
isEven: computed(() => store.state.result % 2 === 0)
}
}
}
然后,在模板中使用该道具应用 conditional class:
<content :class="{ 'even-content': isEven, 'odd-content': !isEven }">
我正在使用 Vue.js 3.0 编写 Vue.js 应用程序。我用它来学习作文 API。我不清楚的一件事是如何在更新存储值时有条件地更新我的组件 UI。为了演示我的问题,我创建了 this fiddle。代码详细在这里:
JavaScript
const store = {
state: reactive({
result = null
}),
generateNewValue() {
this.state.result = Math.floor(Math.random() * 10);
}
};
const MyApp = {
setup() {
return {
}
}
}
const myApp = Vue.createApp(MyApp)
myApp.component("banner",
{
template: '<button @click="onGenerateClick">generate</button>',
setup(props) {
console.log('setting up...');
},
methods: {
onGenerateClick() {
store.generateNewValue();
}
}
}
);
myApp.component("content", {
template: '<div><span>Content</span><button @click="onGenerateClick">generate</button></div>',
methods: {
onGenerateClick() {
store.generateNewValue();
}
}
});
myApp.mount('#my-vue')
HTML
<div id="my-vue">
<banner></banner>
<hr />
<content></content>
</div>
CSS
.even-banner {
background-color:navy;
color: #fff;
}
.even-content {
background-color:blue;
color: #fff;
}
.odd-banner {
background-color:maroon;
color:#fff;
}
.odd-content {
background-color:red;
color:#fff;
}
当我点击“生成”按钮时,生成了一个随机数。如果那个数字是偶数,我想设置 content
div 来使用 even
CSS class。如果是奇数,我要套用odd
CSSclass。不过我有点卡住了。
我的问题是,我可以在全局存储中成功设置状态值。但是,我不知道如何对组件中的 属性 值变化做出反应。我在 setup
函数中添加了一个 watchEffect
。但是,这并不能让我访问 individual 组件本身的状态。我试图在每个组件中找出一种方法来说“嘿,当商店中的 属性 发生变化时,像这样更新 UI。”。
我错过了什么?
您可以使用 computed()
道具来跟踪状态的值(例如,测试它是否均匀):
const MyApp = {
setup() {
return {
isEven: computed(() => store.state.result % 2 === 0)
}
}
}
然后,在模板中使用该道具应用 conditional class:
<content :class="{ 'even-content': isEven, 'odd-content': !isEven }">