SolidStart中出现'template2 is not a function'错误求助
解决SolidStart中组件的"template2 is not a function"错误
问题原因
你遇到的错误根源在于:传递给<Show>的when属性不是响应式可追踪的表达式。你的isStateData是普通函数,直接调用isStateData()只会获取一次静态值,Solid无法追踪location.state的变化,导致<Show>内部渲染逻辑出错,抛出"template2 is not a function"的模糊错误。
解决方案
有两种简单的修复方式:
方法一:直接在when中使用箭头函数
让Solid自动追踪location.state的变化:
const location = useLocation(); return ( <Show when={() => location.state?.myStateData}> State available </Show> );
方法二:用createMemo创建响应式计算值
显式声明响应式依赖,确保状态变化时自动更新:
import { createMemo } from "solid-js"; const location = useLocation(); const isStateData = createMemo(() => location.state?.myStateData); return ( <Show when={isStateData()}> State available </Show> );
补充说明
Solid的响应式系统依赖对信号、计算值的依赖追踪。如果直接调用普通函数获取响应式对象的属性,会丢失追踪能力,导致组件无法正确响应状态变化。其他<Show>组件能正常工作,应该是它们的when属性使用了正确的响应式写法(比如直接引用信号、memo,或箭头函数包裹的依赖)。
内容的提问来源于stack exchange,提问作者Gabriel Cséfalvay
相关产品推荐
相关产品推荐

