SolidJS:如何通过外部依赖触发createEffect?类React useEffect依赖数组
问题:SolidJS的createEffect能否像React useEffect那样通过外部依赖触发?
我希望在location.pathname发生变化时调用setShowMenu方法,示例代码如下:
const location = useLocation() createEffect(() => { console.log(location.pathname) // << 外部依赖 setShowMenu(false) })
目前我用的临时解决方案是:
const location = useLocation() createEffect(() => location.pathname && setShowMenu(false))
回答
SolidJS的createEffect和React的useEffect机制完全不同,它不需要手动声明依赖数组。Solid会自动追踪effect函数内部访问的所有响应式值(比如location.pathname这种信号),只要这些值发生变化,effect就会自动重新执行。
你最初的示例代码其实已经可以实现需求了:
const location = useLocation() createEffect(() => { console.log(location.pathname) setShowMenu(false) })
只要location.pathname变化,这个effect就会触发——因为Solid在第一次执行effect时已经追踪到了对location.pathname的访问,后续该值更新时会自动重新运行effect。
你用的临时解决方案location.pathname && setShowMenu(false)虽然能工作,但逻辑上多了一层判断:只有当location.pathname为真值时才执行setShowMenu。如果你的场景里pathname永远不会是空字符串或假值,完全可以去掉这个判断,直接写更清晰的逻辑。
总结:Solid的响应式系统是自动追踪的,不需要像React那样手动维护依赖数组,只要在effect里访问了响应式依赖,就能自动触发更新。
内容的提问来源于stack exchange,提问作者Ryan Prentiss
相关产品推荐
相关产品推荐

