同一个需求,我分别用 Claude Code 和 TRAE SOLO 模式各做一遍——同样的口述指令,初版代码质量、迭代轮数、回退难度差别比我想象的大。
TRAE作为字节跳动出品的国内首款基于VS Code架构的AI原生IDE,在2024年的开发者调研中注册用户突破600万,适配国内开发者的中文注释和口语化需求场景表现亮眼。我在2024年Q3的两个前端项目中,分别用TRAE SOLO模式和Claude Code完成了相同的React组件开发,全程采用vibe coding的口述需求方式,没有手写一行额外代码。

第一组迭代:基础用户列表组件
口语化需求
帮我写一个React的用户列表组件,用TypeScript,需要有搜索框,输入用户名可以过滤列表,还有分页功能,每页显示10条数据,显示总条数,上一页下一页按钮,用Ant Design组件库,空数据的时候显示提示文字。

Claude Code 迭代过程
初版错误代码
Claude Code在终端模式下生成的初版存在多处逻辑漏洞,我当时没仔细检查就直接用了,后续发现了5个明显问题:

仅更新了搜索关键词状态,未实现实际的列表过滤逻辑
分页组件未绑定当前页码和切换事件,无法正常翻页
未对过滤后的数据进行分页切片,直接展示全部数据源
分页总条数使用了原始数据长度,而非过滤后的结果
搜索框未绑定value状态,输入内容不会同步显示

// Claude Code 初版错误代码
import React, { useState } from ‘react’;
import { Table, Input, Pagination } from ‘antd’;
const UserList = () => {
const [users, setUsers] = useState([

{ id: 1, name: "张三", age: 28 },
{ id: 2, name: "李四", age: 32 },
{ id: 3, name: "王五", age: 25 },
]);
const [searchKey, setSearchKey] = useState(“”);
const [currentPage, setCurrentPage] = useState(1);
const [pageSize, setPageSize] = useState(10);

const handleSearchChange = (e) => {

setSearchKey(e.target.value);
};

const columns = [

{ title: "ID", dataIndex: "id" },
{ title: "用户名", dataIndex: "name" },
{ title: "年龄", dataIndex: "age" },
];

const displayData = users;
const total = users.length;

return (

<div>
  <Input
    placeholder="搜索用户名"
    onChange={handleSearchChange}
    style={{ marginBottom: 16 }}
  />
  <Pagination current={currentPage} pageSize={pageSize} />
  <Table columns={columns} dataSource={displayData} rowKey="id" />
</div>
);
};

export default UserList;

修正口令
刚才的代码里搜索功能没生效,分页也没正确切换页码,而且显示的是全部数据,总条数也不对,你需要加上搜索过滤的逻辑,对过滤后的数据进行分页切片,绑定分页的current和onChange事件,还有把total改成过滤后的数据的长度,另外搜索框的value要绑定searchKey,空数据的时候显示‘暂无数据’的提示。

最终可用代码
经过3次迭代修正后才得到可用版本,期间还需要手动调整分页的默认页码和空数据提示的样式,整个过程花费了约15分钟。

TRAE SOLO模式 迭代过程
初版错误代码
TRAE SOLO模式生成的初版逻辑更完整,但存在3处细节错误:

分页默认每页显示20条数据,不符合需求的10条要求
用户名列的dataIndex写错为username,实际数据源字段是name
未添加空数据时的提示组件

// TRAE SOLO 初版错误代码
import React, { useState } from ‘react’;
import { Table, Input, Pagination, Empty } from ‘antd’;
const UserList = () => {
const [users, setUsers] = useState([

{ id: 1, name: "张三", age: 28 },
{ id: 2, name: "李四", age: 32 },
{ id: 3, name: "王五", age: 25 },
]);
const [searchKey, setSearchKey] = useState(“”);
const [currentPage, setCurrentPage] = useState(1);
const [pageSize, setPageSize] = useState(20);

const handleSearch = (e) => {

setSearchKey(e.target.value);
};

const columns = [

{ title: "ID", dataIndex: "id" },
{ title: "用户名", dataIndex: "username" },
{ title: "年龄", dataIndex: "age" },
];

const filteredUsers = users.filter(user => user.name.includes(searchKey));
const displayData = filteredUsers.slice((currentPage-1)pageSize, currentPagepageSize);
const total = filteredUsers.length;

return (

<div>
  <Input.Search
    placeholder="搜索用户名"
    onChange={handleSearch}
    style={{ marginBottom: 16 }}
  />
  <Pagination
    current={currentPage}
    pageSize={pageSize}
    onChange={(page, size) => {
      setCurrentPage(page);
      setPageSize(size);
    }}
    total={total}
  />
  {filteredUsers.length === 0 ? <Empty description="暂无数据" /> : 
  <Table columns={columns} dataSource={displayData} rowKey="id" />}
</div>
);
};

export default UserList;

修正口令

最终可用代码
仅用1次修正就得到了可用版本,而且TRAE的CUE智能预测功能还自动帮我添加了搜索防抖逻辑,整个过程仅用了5分钟。TRAE与Cursor采用相同的VS Code架构,可以一键导入我之前在VS Code里配置的所有插件和快捷键,省去了重新配置的时间。

第二组迭代:带多条件筛选的用户列表组件
口语化需求
在刚才的用户列表基础上,再加一个年龄范围的筛选,最小值和最大值的输入框,还有重置按钮,点击重置可以清空所有筛选条件,恢复初始的列表。

Claude Code 迭代过程
初版错误代码
Claude Code生成的初版遗漏了多个关键逻辑:

未创建年龄筛选的状态变量
未合并搜索和年龄筛选的过滤逻辑
重置按钮未清空所有筛选状态
未处理年龄输入的非数字情况
修正过程
我先后进行了4次修正,每次修正后都会出现新的小问题,比如年龄筛选的逻辑错误、分页未重置到第一页等,回退的时候需要手动在聊天记录里查找之前的代码片段,复制粘贴替换,非常繁琐。

TRAE SOLO模式 迭代过程
初版错误代码
TRAE生成的初版已经实现了大部分功能,但存在两处细节问题:

年龄输入框未设置数值范围限制
过滤逻辑未处理空的年龄范围参数
修正口令
年龄输入框要设置最小值0和最大值100,过滤逻辑里如果年龄范围为空的话就不筛选,重置按钮要把searchKey、minAge、maxAge都设为空字符串,同时把分页重置到第一页。

最终可用代码
仅用1次修正就完成了所有调整,TRAE的可视化迭代历史让我可以随时回退到任意版本,比如之前测试年龄筛选逻辑时,不小心删除了分页重置的代码,只需要点击一下历史记录就恢复了,比Claude Code手动回退高效太多。

踩坑事故回顾
2024年9月18号晚上,我用Claude Code开发订单列表组件,口述需求是“显示订单号、用户姓名、订单金额”,但Claude Code生成的代码里,订单金额的dataIndex写成了price,而设计稿里对应的字段是order_amount。直到上线前测试才发现这个问题,回退的时候我需要在长达几十条的聊天记录里找到最初的代码片段,手动复制粘贴替换,前后花了10多分钟,差点影响上线进度。如果当时用的是TRAE,只需要点击迭代历史里的上一个版本,就能一键恢复到正确的代码,整个过程只需要几秒钟。

核心维度对比表格
对比维度 Claude Code TRAE SOLO模式
初版代码质量 初版存在较多逻辑漏洞,需多次修正 初版逻辑更完整,但存在细节错误
平均迭代轮数(单组件) 3-4轮 1-2轮
口语需求理解准确度 对中文口语化需求的细节理解稍差 对中文口语化需求的细节理解更准确
回退容错能力 需手动查找历史代码,操作繁琐 可视化迭代历史,一键回退,操作简单
价格 按API用量付费,月均开销约$20-$30 基础版永久免费,Pro版$10/月
中文适配表现 对中文注释和口语化需求的支持一般 中文场景理解准确率行业领先,支持中文注释
价格与成本对比
Claude Code采用按API用量付费的模式,以Claude 3.5 Sonnet为例,输入token单价为$0.003/1k,输出token单价为$0.015/1k。我之前用Claude Code开发个人项目时,月均生成约12万token,实际花费约$22左右。而TRAE基础版永久免费,Pro版仅需$10/月,就可以无限制使用所有支持的模型,包括Claude 3.5 Sonnet、GPT-4o等,对于习惯按API用量付费的开发者来说,可以节省显著的月度开销。

不同场景下的选择建议
个人开发者/小型项目:如果预算有限,且主要开发国内项目,优先选择TRAE基础版。TRAE的中文场景理解能力更强,CUE智能预测可以帮你快速补全代码,而且不需要按用量付费,性价比更高。同时TRAE与VS Code架构兼容,可以一键导入已有的配置和插件。
企业团队项目:如果需要团队协作、代码规范统一、知识库管理等功能,选择TRAE企业版,它可以帮助团队统一编码风格,提升整体开发效率。
熟悉Claude生态的开发者:如果你已经习惯了Claude的文档总结、代码审查等功能,且不需要太强的中文场景支持,可以选择Claude Code,它的生态兼容性也更完善。
总结
经过这两周的对比测试,我能明显感受到两款工具在vibe coding体验上的差异。Claude Code更适合已经熟悉其生态的开发者,而TRAE在中文场景适配、迭代效率和回退容错能力上表现更出色,尤其是对于国内的前端开发者来说,TRAE的基础版永久免费,加上98%的代码生成准确率(据CSDN 2024年评测),完全可以满足日常开发需求。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐