Update of LiveComponent fails with error "component ABC with ID XYZ does not exist or it has been removed"


I’m rendering a live component in a for loop:

 <%= for mapping_form <- inputs_for(f, :mapping)  do %>
<% end %>

“live_select” renders a live component. What I want to do is to update the component dynamically using send_update:

send_update(LiveSelect, id: id, options: options)

This fails with the error:

send_update failed because component LiveSelect with ID "custom_mapping[mapping][0]_source_field_live_select_component" does not exist or it has been removed

However, when I inspect the DOM, I see the live compnent is there and has the expected id custom_mapping[mapping][0]_source_field_live_select_component

I’m kind of puzzled by this issue, as far as I know sending updates to LiveComponents should work even if they’re rendered in a loop.

Wondering if anyone can give me a hint or can think of any reason that would cause the LiveComponent not to be found by LiveView.


P.S: using the new <.inputs_for> component instead of the loop didn’t change anything

The id you need is the one you use with <.live_component id="…" />, which doesn’t necessarily match what is rendered to the DOM.

Also consider this:

The pid argument is optional and it defaults to the current process, which means the update instruction will be sent to a component running on the same LiveView. If the current process is not a LiveView or you want to send updates to a live component running on another LiveView, you should explicitly pass the LiveView’s pid instead.


Nope. I know for sure that it does.

I know about the PID thing too. It’s all the same LiveView process

hahah absolute brain fart :laughing:

I was using the wrong module name: it should be LiveSelect.Component not LiveSelect.

And I wrote the damn library!! I should go back and read my own docs :man_facepalming:

In my defence: It’s been a really hard week for me. I will close this topic and sorry.

1 Like