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

ts 新手问个问题,我最近在用 tailwind + react + ts 写项目,当一个 component 的 classname 太长的时候我想把它分离出来

  •  
  •   ChrisFreeMan · 2023-03-21 11:59:33 +08:00 · 2778 次点击
    这是一个创建于 614 天前的主题,其中的信息可能已经有所发展或是发生改变。
    但是我想保留 tailwind lsp 插件的自动提示功能,我该怎么声明一个 ts 的 className 类型让它能像在 component 中一样自动提示 tailwind 的类名呢。
    13 条回复    2023-03-25 15:40:31 +08:00
    joesonw
        1
    joesonw  
       2023-03-21 12:28:38 +08:00 via iPhone
    用 css modules ,在 scss 里使用 tailwind 。
    nomagick
        2
    nomagick  
       2023-03-21 12:30:17 +08:00
    别用 tailwind ,有毒,class 来就不该承载这种规模的复杂度。
    ChrisFreeMan
        3
    ChrisFreeMan  
    OP
       2023-03-21 12:56:56 +08:00
    @joesonw
    @nomagick 感谢两位的回复,但这不是我要的答案,我明白我在做什么,所以完全是个人编程习惯的问题。
    Whatk
        4
    Whatk  
       2023-03-21 13:10:14 +08:00
    首选项 - 设置 - Tailwind CSS: Class Attributes
    ChrisFreeMan
        5
    ChrisFreeMan  
    OP
       2023-03-21 13:22:48 +08:00
    @Whatk 感谢线索,解决了,我的设置是
    {
    "tailwindCSS.classAttributes": [
    "class",
    "className",
    "ngClass",
    "HTMLAttributes<HTMLDivElement>"
    ]
    }

    如果有错误欢迎各位大佬指出
    sparkle2015
        6
    sparkle2015  
       2023-03-21 13:41:19 +08:00
    是什么编辑器? 我在 VS Code 里没搜到这个插件的名称。

    我自己是在 VS Code 里安插的 tailwind 官方的 Tailwind CSS IntelliSense 插件,直接把 className 声明成 string 就行了,本来 className 就是字符串。

    示例代码如下,当我在 TestComp 的 className 中输入 m-a 的时候就自动出现了 m-auto 的提示。(截图不知道该怎么贴)

    ```
    const TestComp: React.FC<{ className: string }> = ({ className }) => {
    return <div className={className} />
    }

    const TestPage: React.FC = () => {
    return (
    <div className='w-96 m-auto'>
    <h1 className='text-center'>Test Page</h1>
    <TestComp className='w-10 m-a...'/>

    </div>
    )
    }
    ```
    ChrisFreeMan
        7
    ChrisFreeMan  
    OP
       2023-03-21 14:04:52 +08:00
    @sparkle2015 我搞错了,之前不知道怎么回事应该是抽风了,这么设置还不行,这个应该只是设置标签属性提示名称的 /
    ChrisFreeMan
        8
    ChrisFreeMan  
    OP
       2023-03-21 14:05:15 +08:00
    我回头再研究一下
    ChrisFreeMan
        9
    ChrisFreeMan  
    OP
       2023-03-21 14:08:16 +08:00
    @sparkle2015 我用的是 lunarvim
    TunkShif
        10
    TunkShif  
       2023-03-21 20:39:19 +08:00   ❤️ 3
    这个跟 TypeScript 的关系其实不大,Tailwind 的 LSP 可以支持根据正则来匹配要启用 Tailwind IntelliSense 的代码区域,详细可以参考 twin.macro 这个项目的 issue 来自己设置:
    https://github.com/ben-rogerson/twin.macro/discussions/227

    对于 OP 这种类似的需求,我个人的设置是像下图这样的:
    https://imgur.com/5FRvbFU

    在 Tailwind 的样式类的字符串前加一个 /* tw */ 的注释来标记启用 Tailwind IntelliSense ,相关的配置如下:

    ```json
    {
    "tailwindCSS.experimental.classRegex": [
    "\\/\\* tw \\*\\/\\s+`([^`]*)"
    ]
    }
    ```
    ChrisFreeMan
        11
    ChrisFreeMan  
    OP
       2023-03-21 21:50:11 +08:00
    @TunkShif 试了一下,太感谢了朋友,这目前应该是最优解了。
    ChrisFreeMan
        12
    ChrisFreeMan  
    OP
       2023-03-21 21:53:03 +08:00
    顺便贴个图


    终于可以满足纯 ts 开发的变态梦了。
    xling
        13
    xling  
       2023-03-25 15:40:31 +08:00
    tailwind 挺好用的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3115 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 00:12 · PVG 08:12 · LAX 16:12 · JFK 19:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.