vue3: 请教下 nested json config 怎么制作 reactive 前端 UI 呢? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
nowheremanx
V2EX    Vue.js

vue3: 请教下 nested json config 怎么制作 reactive 前端 UI 呢?

  •  
  •   nowheremanx 2023-0-24 06:43:35 +08:00 1484 次点击
    这是一个创建于 717 天前的主题,其中的信息可能已经有所发展或是发生改变。
    用的工具是 element plus 作为前端 UI 库,pinia 作为 store 。

    如果是简单的一对一的 form ,用 vue 写起来很简单。但是遇到 nested 的 config 就力不从心了。请注意,这个 nested 是 dynamic 的,本质上属于一个 tree 。

    举一个例子,就是男女相亲大聚会,参与者可以选择 A 类型桌:"男 A 女免",B 类型桌:"女 A 男免",C 类型桌:"所有人 AA"。当然了,每种类型的桌意味着不同的游戏和酒水,也是各自 config 的一部分。除此之外,这些桌可以选择不同的包间,比如两张 A 桌共享包间 888 , 一张 A 桌一张 B 桌共享包间 666 。因为是 nested ,我们还要允许小包间里再加小包间。

    我最后要作为经理去计算每个人的收费。比如总花费 10000 元,我要按照比例计算每个人的收费。

    聚会 10000
    / | \
    包间 666(20%) 包间 888(20%) 包间 618(60%)
    | | / \
    A 桌(大壮,小红...) B 桌(杰克,肉丝...) 包间 618-1(60%) 包间 618-2(40%)
    / \ / \
    A B B B


    我目前的方案没有用到 store ,直接是 v-model 然后通过 props 和 emit 来传递,但是层层传递显得非常复杂,而且我在各种 A 桌模块,B 桌模块,包间模块里写了一些逻辑来初始化 UI ,散乱不好打理。从头开始创建 config 很简单,但是我现在如果保存了 config ,再载入,我不确定是否能完美复现 UI 。

    所以现在想要用 store 来作为数据中心,写个 class 来处理逻辑操作,而 vue 文件就管显示和与 store 的数据交互。一个 config json 确定一个 UI state 。

    但是层层叠叠的数据,想要 reactive 挺难的,现在想着 flatten 成键值对,然后通过逻辑代码来操作真正的数据。但是怎么想都想不通。


    后端写前端,说多了都是泪,有没有大侠帮忙看看?谢谢了
    6 条回复    2023-10-24 14:19:38 +08:00
    linkopeneyes
        1
    linkopeneyes  
       2023-10-24 09:20:56 +08:00
    不用 store,就依赖注入呗
    leokun
        2
    leokun  
       2023-10-24 09:24:24 +08:00
    不明白你的 nested json 是一种什么样的结构,不过看你的最终目的是 n 个 nested 组合成一个响应式的对象,将原始的 nested 包装成 reactive 后,再用 computed 代理出一层新的对象,这个对象的结构就对应 UI 就比较好处理了
    nowheremanx
        3
    nowheremanx  
    OP
       2023-10-24 12:54:49 +08:00 via iPhone
    @sjhhjx0122 请问什么是依赖注入?
    nowheremanx
        4
    nowheremanx  
    OP
       2023-10-24 13:00:02 +08:00 via iPhone
    @leokun 最大的问题是无限“包间”,包间里面还能有小包间。 如果我限制不能在包间里继续添加标间,那么就容易多了。

    这个问题也是对我前端能力的一点挑战,所以在这里问一问。
    linkopeneyes
        5
    linkopeneyes  
       2023-10-24 14:11:20 +08:00
    linkopeneyes
        6
    linkopeneyes  
       2023-10-24 14:19:38 +08:00
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5835 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 36ms UTC 02:24 PVG 10:24 LAX 19:24 JFK 22:24
    Do have faith in what you're doing.
    ubao 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