Vue 故事书 globalTypes 不重新渲染预览

Vue storybook globalTypes not re-rendering preview

大家好,我目前正在将 Storybook-Vue 集成到我自己的模式库中。 到目前为止,一切都像一个魅力。期待一件事,那就是在 preview.js 中添加一个 globalType,然后在装饰器中使用它。注册新的全局类型有效,我在工具栏中看到它但是当我更改所选值时它不会重新呈现预览。

我的第一个猜测是上下文不是可观察的对象,因此 Vue 永远不知道该对象何时实际获得更新。但我不确定如何更改它。

// preview.js
import Vue from 'vue'
import VueI18n from 'vue-i18n'

Vue.use(VueI18n);

export const globalTypes = {
    locale: {
        name: 'Locale',
        description: 'Internationalization locale',
        defaultValue: 'en-US',
        toolbar: {
            icon: 'globe',
            items: [
                { value: 'de-DE', right: '', title: 'German' },
                { value: 'en-US', right: ' ', title: 'English' },
                { value: 'cs-CZ', right: '', title: 'Czech' },
                { value: 'zh-CN', right: '', title: 'Chinese' },
            ],
        },
    },
};

const localeSelect = (story, context) => {
    const wrapped = story(context)
    const locale = context.globals.locale
    return Vue.extend({
        components: { wrapped, BiToast },
        data () {
            return {
                locale
            }
        },
        watch: {
            locale: {
                deep: true,
                handler (val) {
                    this.$i18n.locale = val
                }
            }
        },
        template: `
                <div>
                    {{ locale }}
                    <wrapped/>
                </div>
            `
    })
}

export const decorators = [localeSelect]

终于成功了。我只需要使用 useGlobals 并在返回的对象之外设置 i18n。

import { useGlobals } from '@storybook/client-api';

const localeSelect = (story, context) => {
    const [{locale}] = useGlobals();
    i18n.locale = locale
    return Vue.extend({
    ...