在React服务器组件official GitHub example repo中,就在这一行中,它们使用response.readRoot()
。
我想创建一个类似的应用程序测试与RSC的东西,它似乎不包含.readRoot()
函数了(因为他们已经更新了npm上的react包中的API,我找不到任何关于它!).但它返回的value
属性树如下:
这意味着,无论我在根服务器组件中呈现什么,如果我呈现那个变量(JSON.parse(value)),都不会出现在浏览器中||未解析)在我的应用上下文提供程序中。
我该怎么渲染这个?
基本上,如果你在客户端得到一些响应(在react服务器组件中),你必须在浏览器中呈现这个响应,浏览器具有来自服务器的新状态,但是由于我不再能够从response访问readRoot()
,那么它可以使用什么替代方法呢?
1条答案
按热度按时间flvtvl501#
我使用了一个技巧来解决这个问题,但有一点要记住,它们仍然是不稳定的API,React使用,它仍然建议不要在生产级别使用React服务器组件,使用它来学习和测试它,并让自己熟悉它,所以回到解决方案:
我的经验是,他们在depo应用程序中使用的缓存层出现了很多问题。我刚刚删除了它。我的建议是,在这些函数和API稳定之前,暂时不要使用它。因此,我在
useServerResponse(...)
函数中删除了它,在这里,我将其重命名为getServerResponse(...)
,因为我后来创建了一个钩子,以便将承诺转换为实际的可渲染响应。所以我做的是:然后创建一个钩子,它将从上面的函数中获得承诺,并为我返回一个实际的可渲染结果:
最后,在我的
AppContextProvider
中,我使用该钩子获取react服务器组件树,并使用该渲染树作为客户端全局上下文提供程序的子级,如下所示:我知道这就像一个变通的黑客解决方案,但它在我的情况下工作得很好,似乎直到我们得到稳定的API与适当的官方文档关于RSC,这是一个工作的解决方案,至少对我来说!