对 Laravel Livewire 组件进行水合和脱水意味着啥?

Posted

技术标签:

【中文标题】对 Laravel Livewire 组件进行水合和脱水意味着啥?【英文标题】:What does it mean to hydrate and dehydrate a Laravel Livewire component?对 Laravel Livewire 组件进行水合和脱水意味着什么? 【发布时间】:2021-04-06 13:18:16 【问题描述】:

有人能指出适用于 Livewire 组件的“水合物”和“脱水”的定义吗?文档搜索中的唯一命中是指

Livewire 将使用当前的非持久数据在请求之间对模型进行水合和脱水。

在生命周期钩子部分,水合物和脱水类钩子是自引用的。

水合物:在组件水合物后对每个请求运行...

对类似问题的回答表明,水合作用是在对象被实例化后用数据填充对象——这有点道理,但什么是“脱水”对象呢?

【问题讨论】:

【参考方案1】:

不知道除了hook之外,文档中是否对生命周期有很好的定义。

我会解释一下我对它的理解。

所以在 Livewire 中基本上有两个级别的水合,一个是水合组件,另一个是水合组件的特性。

Livewire 需要在 phpjavascript 之间来回发送数据才能正常工作。作为发送的消息的一部分,有关于组件的信息和关于属性的信息。但是要让 javascript 可以访问和使用信息,它需要采用正确的格式。

水合过程是获取消息并将其值转换回 php,创建 Livewire 组件并创建该组件具有的任何属性。

脱水是相反的,它遍历所有属性,并将它们序列化,然后将组件序列化并将所有内容捆绑到一条消息中发送到前端。

【讨论】:

@Dharman 抱歉,我没有意识到把它放在底部是个问题!你有什么我可以遵循的指导方针吗? 您可以在meta 和help section 上找到官方指南【参考方案2】:

Caleb 在一篇博文中解决了这个问题。下面链接的帖子也链接到 Livewire Docs,尽管我承认它只链接到文档的一个低级子部分。

我确实认为应该将此类信息放在首位,为其他人理解框架奠定基础。 需要额外脚注才能完全理解的文档,根据定义,不是文档,对吧!?!无论如何,重点是,我不怪任何人错过它!

Blogpost found here >>

官方解释实际上与已经接受的答案(@JoshHanley)没有太大区别。不过,我确实发现该博客更清晰,解释也更好,并且将来可能会对其他人有所帮助。

我知道(根据 SO 指南)我应该重新表述答案以及链接到资源,但老实说,没有捷径可以解释这样的框架。恐怕你必须跳入深渊。

【讨论】:

以上是关于对 Laravel Livewire 组件进行水合和脱水意味着啥?的主要内容,如果未能解决你的问题,请参考以下文章

只有买家可以在 Livewire:Laravel 中对产品进行评分

Laravel Livewire,两个 livewire 组件之间的通信

laravel - livewire 整页组件

Laravel Livewire 组件偏移

Laravel 和 Livewire:组件更改时如何执行 javascript 函数?

在 Laravel 8 Jetstream 的 Blade 组件中绑定 Livewire 属性