Solid Start 中如何正确使用服务器端获取的数据?
我在 Solid Start 里用 routeData 获取数据,但在组件里直接解构就报错了,说不是函数。明明文档里是这么写的啊?
我试过把 routeData 放在 createRouteData 里,也试过在 onMount 里调用,但都不行。控制台提示 “routeData is not a function”,这到底该怎么用?
<script>
import { createRouteData } from 'solid-start';
import { For } from 'solid-js';
const routeData = createRouteData(async () => {
const res = await fetch('https://api.example.com/posts');
return res.json();
});
</script>
<div>
<For each={routeData()}>{(post) => <p>{post.title}</p>}</For>
</div>
routeData的用法。你遇到的问题主要出在对createRouteData返回值的理解上。首先,
createRouteData返回的是一个信号(signal),而不是函数。所以在组件中直接调用routeData()是不正确的写法。这里需要注意 SolidJS 的响应式系统是如何工作的。下面是修正后的代码:
几个关键点要说明:
1.
createRouteData返回的是一个信号(signal),你需要通过routeData()来获取它的当前值,但这个调用应该放在合适的生命周期内。2. 我加了错误处理逻辑,这是很多开发者容易忽略的细节,但在实际项目中非常重要。
3. 需要注意的是,在首次渲染时,数据可能还在加载中,所以用了
?? []来做兜底处理。另外,如果你发现页面刷新时数据没有更新,可以考虑使用
onMount或者其他生命周期钩子来重新获取数据,但这通常不是必需的,因为 SolidJS 会自动管理这些状态。说真的,SolidJS 的响应式模型虽然强大,但刚上手时确实有点反直觉。不过一旦理解了信号的概念,就会觉得非常自然了。