Svelte自动订阅疑问:顶层导入store后无顶层$引用时是否生效?
Svelte自动订阅相关问题解答
根据Svelte官方教程说明:
自动订阅仅适用于在组件顶层作用域声明(或导入)的store变量。
针对你的两个疑问,解答如下:
1. 函数内部使用顶层导入的store的$语法,是否触发自动订阅?
会触发自动订阅。只要user是在组件顶层作用域导入的store,不管你在组件的函数内部、异步回调(比如fetch的then回调)里使用$user,Svelte都会自动处理订阅逻辑,并且会在组件销毁时自动取消订阅,无需手动调用subscribe或unsubscribe。
你的示例代码完全符合自动订阅的条件:
<script> import { user } from "$stores/auth"; function doSomething() { const response = fetch('www.someurl.com').then(response => { console.log($user); }); } </script>
2. 仅顶层导入store但未使用$语法,是否会自动订阅?
不会触发自动订阅。Svelte通过静态分析代码中是否存在$store形式的引用来生成订阅逻辑,单纯导入store变量但没有用$前缀引用它的话,编译后的代码不会包含订阅相关逻辑,也就不会产生订阅行为。
内容的提问来源于stack exchange,提问作者kevlar
相关产品推荐
相关产品推荐

