V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
NerdHND
V2EX  ›  React

Zustand 的文件组织?

  •  
  •   NerdHND · 31 天前 · 1441 次点击

    最近在写一个三维相关的项目, 按照经验我用的是 Zustand 而非之前我更习惯的 Jotai 了.

    这以后我的代码里就多了很多 useXXX.ts 的文件, 按照我原来用 Jotai 习惯的思路我是将 Zustand 的这些 store 尽量和相关的组件贴着, 然后在相关的组件里暴露, 比如一个 KitAside 的组件里要选用不同的 Kit, 那么就 import KitAside, {useKit} from "..." 这样去引入.

    但是随着我的业务变得复杂, 我发现我很难再组织一个 store 是和哪个组件相关的, 因为 Zustand 的状态里往往掺杂着逻辑, 而且没法像 Jotai 那样很容易的拆分成子状态. 所以我现在的文件就出现了很多很多的相对引用去引用一个不相干的组件文件里的 store.

    我目前的改动是发现有这样的引用就把暴露改到那个 useXXX.ts 文件去, 这样虽然解决了引用的地方来源莫名其妙, 但是已经没能解决大量的相对引用.

    各位是如何处理 Zustand 的 store 文件的呢? src 下有个专门的 stores 文件夹还是说和我一样放在相关的组件旁边?

    6 条回复    2024-10-29 21:52:07 +08:00
    foolishcrab
        1
    foolishcrab  
       31 天前 via iPhone
    文件夹组织也是样板代码的一部分
    zustand 的优点是无样板,放哪按你项目其他部分的分割逻辑来就行了
    foolishcrab
        2
    foolishcrab  
       31 天前 via iPhone
    你现在这个问题的根本原因是不是一些应该存在上层的公共状态,错误下沉到了组件里?

    你说的两种方式组合起来也是可以的
    flmn
        4
    flmn  
       30 天前
    为啥不继续用 Jotai 呢?
    mouyase
        5
    mouyase  
       30 天前
    理论上如果业务逻辑改变了,那 Stroe 大概就需要提升到上层了吧。

    如果你在一个子组件里做了一些不属于他责任范围的事情,那本身这个设计就有点问题。
    ysmood
        6
    ysmood  
       17 天前
    我也是头疼 zustand 的文件组织和冗长代码,于是最近自己写了个库 stalo 。我写了个 todo app 用来演示如何将一个 store 分割成逻辑隔离的多个文件: https://github.com/ysmood/stalo/tree/main/examples/TodoApp

    从目前我自己的使用来看,各项指标都由于 zustand ,我甚至用 stalo 写了个 devtools 来 debug stalo 自己: https://stalo-examples.vercel.app/examples/Devtools.tsx
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1847 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 16:44 · PVG 00:44 · LAX 08:44 · JFK 11:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.