SolidJS -如何获得当前组件实例



是否有一种方法可以访问实例/获得当前在SolidJS中呈现/活动的组件的引用,从而获得其当前的道具,信号,内部状态,效果等?

我正在寻找类似React的__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner(但在生产中也可消费)或Svelte的运行时内部get_current_component()的东西。为了给出一点上下文,我需要它的原因是因为我正在构建一个库,该库提供了一个函数,该函数应该能够访问当前使用该函数的组件的props。

我试着玩周围SolidJSgetOwner(),但我不确定我理解它。我找不到任何关于组件当前道具、信号或效果的引用。

是否有任何方法可以在Solid中实现它,或者是否有任何"hack"来实现类似的东西?

提前谢谢

由于Solid的工作方式和处理"组件"的方式,这些东西是有限的,不可用的,或者只在开发中可用。在生产环境中,Solid会丢弃不需要的东西。

问题是"组件实例"并不存在于实体中,不像Svelte或React。它只是一个信号和反应的图表。什么是组件?只是一个返回一些DOM元素的函数,通过将它们添加到图中创建一些信号和计算,然后……它被垃圾收集,就是这样。生产环境中的组件与其他函数(钩子)没有什么不同。

当然,这个图在某种程度上仍然是可以分析的。(生产中少一点)你可以看到所有的计算(createEffect, createMemo等)和它们当前观察到的信号。仅此而已。也许还有上下文。正如我们所理解的那样,Props是一个由父类传递给子类的响应性对象,它只是一个对象,有一些getter传递给一个函数——它并不作为一个单独的实体存在于响应图中。你仍然可以访问其中的信号——但只有当它们被用于某些效果时——创造性图形的某些节点有对它的引用。

有点像这样:https://playground.solidjs.com/?hash=597826062&版本= 1.4.1

因此,如果您正在创建一个用于生产的库-我宁愿建议您通过参数/props显式地提供您想要的数据,而不是遍历内部。

但是如果你想在开发过程中对响应图进行一些可视化,你可以看到这个调试器的源代码:https://github.com/thetarnav/solid-devtools/tree/main/packages/debugger

最新更新