厉害了!可以用 React 编写 VS Code TreeView 啦!

ReactVSCodeTreeView是一款基于React的VSCode插件开发工具,它简化了TreeView的创建过程,尤其适用于那些层级结构明确的视图,如菜单等。本文介绍了如何安装和使用该插件。

点击上方“编程派”,选择设为“设为星标”

优质文章,第一时间送达!

这篇主要是对 React VS Code TreeView 的简单介绍,如果后面不懒的话,可能会再写一篇讲讲实现。

https://github.com/LeuisKen/react-vsc-treeview

背景

TreeView 是 VS Code 为第三方插件开发提供的最主要的视图定制方式。此 API 用于构建一个基本的树状结构来承载用户交互,如下图所示。

VS Code 为用户编写 TreeView 提供了递归式的 API,即:

getChildren

用于获取某个节点下属的节点数组,根节点记为 null;

getTreeItem

用于获取实际渲染的 TreeItem 实例。

这种 API 非常适合文件树的场景(例如 ftp 文件浏览插件、github 文件浏览插件):不知道每一层有多少个节点,也不知道有多少层,并且对懒加载的支持也非常好。其基本使用形式如下(代码来自 vscode-github-explorer:https://github.com/LeuisKen/vscode-github-explorer/blob/master/src/view/fileTreeDataProvider.ts ):

class FileTreeView
    implements vscode.TreeDataProvider<FileTreeNode>, vscode.Disposable {

    private disposables: vscode.Disposable[] = [];

    // 这些事件用于更新树中的内容
    private _onDidChangeTreeData = new vscode.EventEmitter<FileTreeNode>();
    readonly onDidChangeTreeData? = this._onDidChangeTreeData.event;

    // 这里获取 children 信息,作为数组返回
    async getChildren(node?: FileTreeNode) {
        const data = await github.getFileEntries(repository, ref, path);
        return data;
    }

    // 这里将每一个 children 再一一映射到 TreeItem 数据结构
    getTreeItem(node: FileTreeNode) {
        const uri = vscode.Uri.parse('...');
        const item = new vscode.TreeItem(uri);
        return item;
    }

    dispose() {
        this.disposables.forEach(disposable => disposable.dispose());
        this.disposables = [];
    }
}

不过,我们在使用这一 API 开发业务的过程中,会去创建的常常不止是文件树,也包括了比较常见的菜单——虽然可能不知道每层有多少个节点,但是我们知道一共有多少层,懒加载也并不总是那么必要。这种情况下,用前端更为熟悉的类 HTML 语法声明式的编写一个这样的 TreeView 是非常简单的。对于如下图的 TreeView,相信大家都能很直观的想到如何用 HTML 描述(这里为了简洁采用 markdown 描述):

- John
- john@example.com
- Operation
    - Add
    - Update
    - Delete

而如果使用 VS Code TreeView 的递归式 API,去表示这种声明式更擅长的树状结构,代码就会稍显得有些冗余,不够清晰。

class SimpleTreeView
    implements vscode.TreeDataProvider<Node> {

    private disposables: vscode.Disposable[] = [];

    // getChildren 无法直观的展示数据间存在的父子关系
    // 当然你可以借助数据结构和循环来优化下面的代码
    // 但我们更希望找到更为通用的解决方案,并且尽量复用我们已有的知识
    async getChildren(node?: Node) {
        if (node === null) {
            return ['John', 'john@example.com', 'Operation'];
        }
        else if (node === 'Operation') {
            return ['Add', 'Update', 'Delete'];
        }
        return [];
    }
}

为了能够更加清晰高效地解决类似“菜单”这样:我们知道有多少层,并且为每层赋予了确切含义的树状视图的开发问题,我们决定使用 React 做为视图描述方式。因此开发了本代码库。

下载

使用 npm 或者 yarn 安装:

$ npm i react-vsc-treeview --save
# or
$ yarn add react-vsc-treeview

使用文档

如何在 VS Code 中添加一个 TreeView

无论你使用那种方式创建 TreeView,这里的步骤都是必须的。

关于如何创建一个 VS Code 插件,可以使用官方提供的 Yeoman Generator,具体参考官方文档:Your First Extension(https://code.visualstudio.com/api/get-started/your-first-extension)。简化的命令如下:

$ npm install -g yo generator-code
$ yo code       # 会有交互式命令行提示你如何配置
$ code ./helloworld

创建一个 TreeView 需要在 package.json 里面做一些基础的声明,具体参考官方文档:Tree View Guide(https://code.visualstudio.com/api/extension-guides/tree-view)。其中包括 viewsContainer 和 view 两个概念,可以理解成 View 的 Tab 容器和 View 本身,官方内置提供了四个 viewsContainer (explorer:文件浏览窗口、debug:调试窗口、scm:版本控制窗口、test:测试窗口)。简单起见,我们可以像代码库中自带的 example 一样把 view 添加到现有的 test viewContainer 中,这样只需要在 package.json 中添加如下内容即可:

"contributes": {
    "views": {
        "test": [
            {
                "id": "baidu.tree.example",
                "name": "用户面板"
            }
        ]
    }
},

使用 React VSC TreeView

使用起来就像正常编写 React 组件一样自然:

import React, {useState, useEffect} from 'react';
import ReactTreeView, {TreeItem} from 'react-vsc-treeview';
import {getUser, User} from './api';

const App = () => {
    const [user, setUser] = useState<User | null>(null);
    useEffect(() => {
        getUser().then((res) => {
            setUser(res);
        });
    }, []);
    if (user === null) {
        return <TreeItem label="Loading..." />;
    }
    return (
        <>
            <TreeItem label={user.username}></TreeItem>
            <TreeItem label={user.email}></TreeItem>
            <TreeItem label="Operation">
                {
                    user.collection.map((item) => (
                        <TreeItem key={item} label={item}></TreeItem>
                    ))
                }
            </TreeItem>
        </>
    );
};

const treeview = ReactTreeView.render(
    <App />,
    'baidu.tree.example'        // 这里对应 package.json 中配置的 view id 字段
);

React VSC TreeView 仅提供了上述示例代码中展示的两个 API,ReactTreeView 和 TreeItem

ReactTreeView

你可以简单的把它理解成 ReactDOM,正像我们常用的那样:

ReactDOM.render(<App />, document.getElementById('app'));

他提供的能力也是 render,使用如下:

const treeview = ReactTreeView.render(
    <App />,
    'baidu.tree.example'        // 这里对应 package.json 中配置的 view id 字段
);

TreeItem

TreeItem 是唯一允许被使用的 React 组件(因此不要尝试使用 p div span 这样的传统 HTML 标签)。其 Props 接口如下,除了 command 属性额外做了对字符串类型的支持,其余均与 VS Code API 提供的 TreeItem API 保持一致:

export interface TreeItemProps {
    label?: string;
    id?: string;
    iconPath?: string | vscode.Uri | { light: string | vscode.Uri; dark: string | vscode.Uri } | vscode.ThemeIcon;
    description?: string | boolean;
    resourceUri?: vscode.Uri;
    tooltip?: string | undefined;
    command?: string | vscode.Command;
    contextValue?: string;
}

接下来,就请愉快的使用你所熟悉的 React 吧,推荐使用 React hooks API。

感谢

本代码库灵感和代码参考都来源于 Sophie Alpert 在 React Conf 2019 上所做的分享—— Building a Custom React Renderer ,在此感谢。

回复下方「关键词」,获取优质资源

回复关键词「 pybook03」,立即获取主页君与小伙伴一起翻译的《Think Python 2e》电子版
回复关键词「入门资料」,立即获取主页君整理的 10 本 Python 入门书的电子版
回复关键词「m」,立即获取Python精选优质文章合集
回复关键词「book 数字」,将数字替换成 0 及以上数字,有惊喜好礼哦~
推荐阅读

题图:pexels,CC0 授权。

<think> 我们正在讨论如何在VS Code中使用`code .`命令打开React项目。根据用户的上一次问题和引用内容,我们已经知道: - 用户已经创建了React项目(例如通过`npx create-react-app my-app`) - 现在需要在该项目的目录下使用`code .`命令在VS Code中打开 步骤: 1. 首先,确保已经通过命令行进入了React项目的根目录(即包含package.json文件的目录)。 2. 然后在命令行中输入`code .`并按回车。 但是,如果遇到无法识别`code`命令的情况,我们需要配置VS Code的环境变量。 根据引用[1]和[3]的上下文,我们还可以参考以下信息: - 引用[1]提到在VS Code中打开新创建的应用程序文件夹,并开始编写React代码。 - 引用[3]提到在VS Code的终端上输入创建react项目的命令,以及可能遇到的权限问题。 因此,详细步骤如下: ### 使用`code .`命令在VS Code中打开React项目的步骤 1. **打开终端(命令行)**: - 对于Windows:可以使用命令提示符(CMD)或PowerShell。 - 对于macOS或Linux:使用终端(Terminal)。 2. **导航到React项目根目录**: ```bash cd 你的项目路径 ``` 例如,如果项目名为`my-app`,并且放在桌面上,则: ```bash cd Desktop/my-app ``` 3. **执行`code .`命令**: ```bash code . ``` 这将启动VS Code并打开当前目录(即你的React项目)[^1]。 4. **如果`code`命令不可用**: - **Windows**:在安装VS Code时,确保在安装向导中勾选“添加到PATH”(Add to PATH)选项。如果已经安装但未添加,可以重新运行安装程序并选择修改,然后勾选该选项。 - **macOS**: 1. 打开VS Code。 2. 按下`Command+Shift+P`打开命令面板。 3. 输入`shell command`,选择“Shell Command: Install 'code' command in PATH”并执行。 - **Linux**:通常安装VS Code时会自动添加,如果没有,可以尝试在终端执行以下命令: ```bash sudo ln -s /usr/share/code/bin/code /usr/local/bin/code ``` 5. **验证是否成功**: - 执行`code .`后,VS Code应该会启动并打开项目文件夹,左侧文件资源管理器会显示项目文件。 ### 可能遇到的问题及解决方法 - **问题1:执行策略限制(Windows PowerShell)** 如果在PowerShell中运行`code .`时遇到执行策略限制(如引用[3]中提到的`Restricted`),需要更改执行策略: ```powershell Set-ExecutionPolicy RemoteSigned -Scope CurrentUser ``` 然后重新尝试[^3]。 - **问题2:命令未找到(macOS/Linux)** 确保已按照上述步骤将`code`命令添加到PATH。 - **问题3:VS Code未安装** 如果尚未安装VS Code,请从[官方网站](https://code.visualstudio.com/)下载安装[^1]。 ### 总结流程 ```mermaid graph TD A[打开终端] --> B[进入项目目录:cd 项目路径] B --> C[执行命令:code .] C --> D{是否成功?} D -- 是 --> E[在VS Code中编辑项目] D -- 否 --> F[检查VS Code是否安装并配置PATH] F --> G[重新配置PATH或安装] G --> C ``` §§相关问题§§ 1. 如何在命令行中快速进入React项目目录? 2. 如何解决VS Code终端中命令不可用的问题? 3. 如何在VS Code中运行和调试React应用? </think> ### 如何使用 `code .` 命令在 VS Code 中打开 React 项目 #### 详细步骤说明(基于引用[1][2][3]) 1. **确保环境配置正确** - 安装 Node.js 和 npm(验证命令:`node -v` 和 `npm -v`)[^1][^3] - 确认 VS Code 已安装并添加命令行支持: ```bash # macOS/Linux 添加PATH sudo ln -s /Applications/Visual\ Studio\ Code.app/Contents/Resources/app/bin/code /usr/local/bin/ ``` Windows 需在安装时勾选 *"添加到PATH"*[^3] 2. **命令行操作流程** ```bash # 进入React项目根目录(包含package.json的文件夹) cd /path/to/your-react-project # 执行打开命令 code . ``` - 成功标志:VS Code 自动启动并加载项目文件[^1] 3. **常见问题解决** | 问题现象 | 解决方案 | |---|---| | `code: command not found` | 重新安装VS Code并勾选 *"Add to PATH"* [^3] | | PowerShell执行策略限制 | 执行:<br>`Set-ExecutionPolicy RemoteSigned` [^3] | | 打开错误目录 | 确保终端路径在项目根目录(执行`pwd`验证) | 4. **扩展用法** ```bash # 快速创建并打开新React项目 npx create-react-app new-project && code new-project # 打开特定文件 code src/App.js ``` #### 操作流程图 ```mermaid graph TD A[打开终端] --> B[cd 项目目录] B --> C[执行 code .] C --> D{是否成功?} D -- 是 --> E[VS Code加载项目] D -- 否 --> F[检查PATH配置] F --> G[重装/配置VS Code] G --> C ``` > **注意**:在 Windows PowerShell 中若遇权限错误,需以管理员身份运行 VS Code[^3]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值