getOwner 获取所有者
编辑此页面获取当前运行代码所属的响应式作用域,例如,用于在当前作用域之外的后续 runWithOwner
调用中传递。
在内部,计算(效果、备忘录等)会创建从其所有者一直到由 createRoot
或 render
创建的根所有者的所有者。
特别是,这个所有权树让 Solid 能够通过遍历其子树并调用所有 onCleanup
回调来自动清理已处理的计算。
例如,当 createEffect 的依赖项发生变化时,该效果会在再次运行效果函数之前调用所有后代的 onCleanup
回调。
调用 getOwner
会返回负责处理当前执行块的当前所有者节点。
组件不是计算,所以不会创建所有者节点,但它们通常是从会创建所有者的 createEffect
中渲染的,所以结果类似:当组件被卸载时,所有后代的 onCleanup
回调都会被调用。
从组件作用域调用 getOwner
会返回负责渲染和卸载该组件的所有者。
注意,拥有响应式作用域并不一定意味着正在追踪。
例如,untrack 会在函数执行期间关闭追踪(而不创建新的响应式作用域),通过 JSX 创建的组件(<Component ...>
)也是如此。