MinonHeart

求助 vue/pinia 高手,多 vue 实例如何共享一个全局 pinia 实例,且 vue 有自己的 pinia 实例?

  •  
  •   MinonHeart ·
    Aqours · Nov 10, 2023 · 1770 views
    This topic created in 939 days ago, the information mentioned may be changed or developed.
    const fakeGlobalPinia = createPinia()
    
    function createVueInstance(container) {
        const app = createApp(...)
        
        // App 的 pinia 实例
        app.use(createPinia())
        
        // 想象中是这样的。
        app.use(fakeGlobalPinia)
        
        // ....
    }
    
    const vueApp1 = createVueInstance(...)
    const vueApp2 = createVueInstance(...)
    

    想象中是想上面的代码一样。

    场景举例

    假设有两个 vue app (在一个页面上),每个 app 都会控制主题的样式( theme ,这个是全局单例),我想把 theme 搞成一个全局的 store ,同时给两个 vue app 使用。但是每个 vue app ,也有自己的 store ,互不影响。

    问题

    1. 单 pinia 能够实现这种效果吗?
    2. 有什么其他方式可以实现?还是我的思路不对
    Supplement 1  ·  Dec 19, 2023
    const fakeGlobalPinia = createPinia()
    
    /**
     * 这样就可以多实例共享了
     */
    export const useGlobalStore = () => defineStore('id', {})(fakeGlobalPinia);
    
    function createVueInstance(container) {
        const app = createApp(...)
    
        // App 的 pinia 实例
        app.use(createPinia())
    
        // 想象中是这样的。
        app.use(fakeGlobalPinia)
    
        // ....
    }
    
    const vueApp1 = createVueInstance(...)
    const vueApp2 = createVueInstance(...)
    
    Supplement 2  ·  Dec 19, 2023

    上面写错了,修正一下

    const fakeGlobalPinia = createPinia()
    
    /**
     * 这样就可以多实例共享了
     */
    export const useGlobalStore = () => defineStore('id', {})(fakeGlobalPinia);
    
    function createVueInstance(container) {
        const app = createApp(...)
    
        // App 的 pinia 实例
        app.use(createPinia())
    
        // 这个不需要了
        // app.use(fakeGlobalPinia)
    
        // ....
    }
    
    const vueApp1 = createVueInstance(...)
    const vueApp2 = createVueInstance(...)
    
    6 replies    2024-10-16 01:09:31 +08:00
    paopjian
        1
    paopjian  
       Nov 10, 2023
    window 设个全局变量直接取 window 的配置?.
    MinonHeart
        2
    MinonHeart  
    OP
       Nov 10, 2023
    @paopjian 放哪不重要,主要是实现方式。能想到可以用 vue.reactive 实现,这样有点割裂。想知道单 pinia 能不能实现这个效果
    qiaobeier
        3
    qiaobeier  
       Nov 10, 2023
    不太清楚你的需求,之前我有个项目有点类似吧,就是一套代码但是输出不同的 theme 。我的方案是使用环境变量物理切换文件的。比如 npm run dev/build --theme=one ,然后 nodejs 运行时使用不同的文件这样子。
    ddch1997
        4
    ddch1997  
       Nov 23, 2023
    单 pinia ,new 两个实例,然后 new vue 的时候一个为 store ,一个 commonStore ,是不是就可以了
    linkopeneyes
        5
    linkopeneyes  
       Dec 11, 2023
    放在 window 上然后在每个 vue 实例的时候注入下去用?
    zhangdahai
        6
    zhangdahai  
       Oct 16, 2024
    完全可以用一个 pinia 实例,state 里面放一个 data,另一个 fakeData ,操作是一样的,然后操作的时候判断当前运行的脚本 import.env.VITE_ENV == "prod" 就走 data 的操作逻辑,否则走 fakeData 实例的操作逻辑
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3058 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 43ms · UTC 08:56 · PVG 16:56 · LAX 01:56 · JFK 04:56
    ♥ Do have faith in what you're doing.