开发体验超赞的SolidJS2.0来了

SolidJS时间线

SolidJS1.0是在2021年发布的, 距今为止已经有5年的时间, 期间衍生了SolidStart这个SSR项目, 整体开发体验是非常不错的, 建议大家都尝试一下

SolidJS 2026年3月发布了2.0的Beta版本, 这个版本给我们带来了不少能够提升开发体验的特性, 这篇文章针对较为实用的新特性给大家用代码说明

1. 一级异步支持

以前写异步要手动搞loadingerror 三个 signal,现在直接合并, 少写了大概 70% 的样板代码

Solid 1.x(需要手动编排)

ts 复制代码
// 1.x:需要手动处理 loading/error/state
const [data, setData] = createSignal(null);
const [loading, setLoading] = createSignal(true);
const [error, setError] = createSignal(null);

createEffect(async () => {
  setLoading(true);
  try {
    const res = await fetch('/api/data');
    setData(await res.json());
  } catch (err) {
    setError(err);
  } finally {
    setLoading(false);
  }
});

// 模板中需要大量条件判断
return (
  <>
    {loading() && <div>Loading...</div>}
    {error() && <div>Error: {error().message}</div>}
    {data() && <div>{data().value}</div>}
  </>
);

Solid 2.0(直接返回 Promise,框架自动处理挂起)

ts 复制代码
// 2.0:async 成为一等公民,直接返回 Promise
const data = createMemo(async () => {
  const res = await fetch('/api/data');
  return await res.json();
});

// 模板更简洁,框架自动处理 loading/error
return (
  <Suspense fallback={<div>Loading...</div>}>
    <div>{data().value}</div>
  </Suspense>
);

2. action() + 乐观更新(统一数据流)

把乐观更新、请求成功后的数据合并、失败后的回滚,这三件事统一成一个 action() 来处理,不用自己手动编排流程

Solid 1.x(手动编排乐观更新 + 回滚)

ts 复制代码
const [list, setList] = createStore({ items: [] });

const addItem = async (newItem) => {
  // 1. 乐观更新
  setList('items', [...list.items, newItem]);
  
  try {
    // 2. 发送请求
    const res = await fetch('/api/items', {
      method: 'POST',
      body: JSON.stringify(newItem)
    });
    const saved = await res.json();
    
    // 3. 用服务器返回值替换
    setList('items', list.items.map(i => 
      i.id === newItem.id ? saved : i
    ));
  } catch (err) {
    // 4. 回滚
    setList('items', list.items.filter(i => i.id !== newItem.id));
  }
};

Solid 2.0(action() + createOptimisticStore 统一流程)

action() 自动帮你监听异步过程。setOptimistic 先改数据让用户立刻看到,请求成功了 action 自动用返回值覆盖乐观数据,请求失败了自动回滚到原来的状态。不用自己写 try/catch 做回滚,也不用手动 map 替换数据,4 步代码压成 1 步

ts 复制代码
const [store, { mutate, setOptimistic }] = createOptimisticStore({
  items: []
});

const addItem = action(async (newItem) => {
  // 乐观更新自动处理
  setOptimistic('items', [...store.items, newItem]);
  
  const res = await fetch('/api/items', {
    method: 'POST',
    body: JSON.stringify(newItem)
  });
  return await res.json();
  // 成功:自动用返回值更新;失败:自动回滚
});

// 模板中直接使用
<For each={store.items}>{item => <div>{item.name}</div>}</For>

能感觉到SolidJS团队是真的在听开发者抱怨, SolidJS不是在堆功能,而是在减少开发者的实际痛点

5年时间从1.0到2.0Beta,节奏稳,对于一直用SolidJS的人来说,这种更新节奏挺让人安心的, 至少不用担心学了一堆API后面用不上以及

相关推荐
CoCo的编程之路1 小时前
2026全栈演进:使用前端开发助手进行项目重构的最佳工具
大数据·前端·人工智能·ai编程·comate
@PHARAOH2 小时前
WHAT - NextAuth 权限认证机制
前端·微服务·服务端
掘金一周2 小时前
问卷调查:如果现在收到裁员通知,你手里的现金流能支撑多久? | 沸点周刊6.4
前端·人工智能·后端
wb043072012 小时前
前厅翻修记——从阿明的“8 秒点餐页“,看前端工程化与用户体验的全面升级
前端·架构·ux
riuphan2 小时前
揭秘 JS 类型转换:ToPrimitive 机制的神秘面纱
前端·javascript
最爱睡觉睡觉睡觉2 小时前
Flutter ThemeData 主题系统
前端·app
最爱睡觉睡觉睡觉2 小时前
pub.dev 常用包 vs npm 生态对照
前端·app
先吃饱再说2 小时前
从三行代码理解前端的“三权分立”:HTML、CSS、JS 各司其职
前端
biubiubiu_LYQ2 小时前
入门开发者基础篇之CSS浮动布局:一文吃透浮动底层逻辑
前端·css