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

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

  •  
  •   MinonHeart
    Aqours Nov 10, 2023 1759 views
    This topic created in 932 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     2940 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 52ms UTC 03:48 PVG 11:48 LAX 20:48 JFK 23:48
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86