Softknobs

Softknobs

I have created a liveview with a child livecomponent (dialog). I was expecting to be able to define assigns in the child mount function but I get the error:

assign @value not available in eex template.
Please make sure all proper assigns have been set. If this
is a child template, ensure assigns are given explicitly by
the parent template as they are not automatically forwarded.

I was expecting this to work since I assign :value is in the mount function of the child component. Though, the error message suggests that the value has to be “forwarded” by the parent liveview in this case. If this is the case, I don’t understand what are the benefits of livecomponents since part of the logic still has to remain in the parent liveview with values passed to the child component when needed.

On the other hand, using two liveviews for this use case does not seem optimal as it would require the usage of PubSub. The latter seems to be more suited for broadcasting which is not something useful for simple component interactions (eg. show/hide).

Livecomponents examples I found just show simple use of them where one or two values are passed to the component but nothing with more complex livecomponents.

Thanks.

Showing Posts 1 to 7

mindok

mindok

Are you components “stateless” or “stateful”? If “stateless” try updating your components socket assigns in the update callback rather than the mount.

outlog

outlog

can you post code? not sure I understand..

either way see this - which might be helpful..

imartinat

imartinat

Hi,

It doesn’t seem that Livecomponent can have internal state. It’s not possible to define value only in the child component. It needs to be defined in the parent template and included in the <%= live_component @socket, value: ....
In the link you posted, StatefulComponent can update title but title is included in

<%= live_component(
          @socket,
          DemoWeb.StatefulComponent,
          id: "1",
          title: @title
        )
    %>

It isn’t possible to use title in the StatefulComponent without being included in live_component.

Softknobs

Softknobs OP

Thanks for the link. The problem with such examples is that they only show simple use cases.

Softknobs

Softknobs OP

I am using stateful components. From what I have tried I get to that same conclusion that the live_component cannot have declare internal values. That’s why I don’t understand the benefits of live_components.

mindok

mindok

What have you tried to come to that conclusion. The docs (Phoenix.LiveComponent — Phoenix LiveView v1.2.5) discuss stateful components managing their own state.

You need to pass in an id in the assigns for a component to be stateful. I have only done a simple test - adding a button to a component that increments a counter when it is clicked. But I can have multiple instances of the same component on the same liveview tracking their own counter - I assume that’s what you mean by declaring their own internal values.

Softknobs

Softknobs OP

You are right and I did some more research and found an example where the live_component declares its own values:
https://github.com/phoenixframework/phoenix_live_view/issues/414

So it is possible and my conclusion was mostly based on the fact that there are not any examples of this usage.
The reason for which it didn’t work in my project was my fault. I copy pasted the mount definition from my LiveView in my component. However, there is a subtle difference in the mount function for the LiveView and the one for the LiveComponent.

LiveComponent:
def mount(socket) do

LiveView:
def mount(_session, socket) do

So my mount definition was wrong and the value was never added to the assigns.

Thanks to everyone who took the time to help me.

— All posts loaded —

Where Next? Top

Trending in Questions Top

Blokh
Hey guys, I’ve got a huge CSV ( around 10 GB ) that needs to be processed hourly Do you guys have any suggestions what is the best prac...
New
kszambelanczyk
Hello! Could someone please give me a help/sample code, how to delete a file from s3 using waffle/waffle_ecto from Phoenix app. I creat...
New
Onor.io
I have what I’ve heard referred to as a “lookup table” in my database. This is a way of assigning codes to common values. One common lo...
New
Trolleger
What approach to take when sending live updates to “random” users Hi! I have a question, I have a little chat app, and when I create a DM...
New
RemyXRenard
I’m seeing that a list inside a Kino.DataTable will be interpreted as a charlist, even if the Kino.configure() is set to charlists: :as_l...
New
matt-savvy
Anyone here using Honeybadger? My Honeybadger account is being overwhelmed with noise from some bots. Seeing a lot of Bandit.HTTPError...
New
samoloth
Hi, I’ve just set up an application with ash_authentication. There is only magic link strategy for now, so there is no confirmation add o...
New

Other Trending Topics Top

mudasobwa
I am happy to introduce the very α version of the new programming language compiled to BEAM. Welcome Cure. It has literally three kille...
New
garrison
Hobbes is a low-level distributed database for the Elixir programming language. Hobbes provides a simple, safe, and scalable storage lay...
New
mcass19
ExRatatui lets you cook up rich terminal UIs in Elixir, powered by Rust’s ratatui via Rustler NIFs. Build interactive terminal applicatio...
New
Damirados
Hello everyone. After busy few months I am happy to announce v0.1.0 of Emerge &amp; Solve. They are GUI (Emerge) and State management (S...
New
netoum
Corex is an accessible, unstyled UI component library for Phoenix that integrates Zag.js state machines using Vanilla JavaScript and Live...
New
wintermeyer
There are three potential reasons for members of this forum to have a look at https://vutuv.de You are tired or annoyed of LinkedIn. Yo...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews