So I wanted to make sure to understand the different tradeoffs between LiveComponents and child LiveViews
If you have the need create a component that also needs state and handle events, you’ll need to reach for either a LiveComponent or a child LiveView.
The difference between them as far I as found out so far:
- A
LiveComponentruns in the parentLiveViewprocess, whereas a child will run in it’s own process. This means that a crash in theLiveComponentcrashes the parent. This is not the case for the child. - because a
LiveComponentis not a process, it does not havehandle_info. So if you need to interact withhandle_infoyou’ll need to handle that in the parent. - A child
LiveViewcan’t implementhandle_params. I’m not sure how the lifecycle of a childLiveViewworks exactly. - You can’t pass assigns to a child
LiveVieweasily. You can pass them via a session, or via sending messages I guess. - re-rendering of a child
LiveViewdoesn’t happen automatically when the parent re-renders, even if the session data changes, no re-render is triggered. - When using a
LiveComponentyou’ll always need to passphx-targetto target the correct component. This means you might need to pass on the@myselfto other components.
Can you fully encapsulate state/events in case you want to render it from multiple different parents?
I don’t think so, the parent always needs to know about handle_info in case of a LiveComponent.
And a child LiveView behaves completely differently regarding to passing assings and re-rendering.
Furthermore, when using LiveComponents you will need to pass on @myself down to all components that trigger any handle_event callbacks. Even if you nest your components only a little bit, this is a lot of passing this down.
When to choose a child LiveView over a LiveComponent?
I’m not sure I know good use cases.
Remarks?
Let me know where I’m wrong.




















