Sometimes, Changes in live view assigns don't reflect on view

defp shipping_block( %{order: %{products: [_ | _] = products, delivery_info: delivery_info}} = assigns ) do 
{added?, description} = shipping_description(delivery_info, products) 
assigns = Enum.into(assigns, %{description: description, added?: added?}) 

  <.summary_block label={"Shipping #{@description}"} value={Cart.total_shipping(@order)} /> 

  <%= unless @order.placed_at do %>
   <.summary_block label={@added? && "#{zip(@order)} Edit" || "Add zipcode for actual"} class="mt-[-4px] text-sm underline cursor-pointer text-blue-planning-300", event="zipcode" />
  <% end %> 

I am using {:phoenix_live_view, "~> 0.18.18"},
Elixir 1.14.3
erlang 24.1.7

I am getting description using this method shipping_description(delivery_info, products),
So whenever delivery_info is changed, the description is also changed accordingly.
However, changes don’t reflect in view. I used IO.inspect to confirm that it changes the description once delivery_info is updated.
But that change doesn’t reflect on the page until it refreshes. However, if I directly call this method within HTML using “#{}” it works correctly. I encountered the same type of issue many times in live views.
Why does this happen?

Does this issue exist in live views, or am I doing something wrong in the code? i see no issue in the code, and when using IO.inspect, it prints the correct values for description. However on view it doesn’t change

defp summary_block(assigns) do 
   assigns = Enum.into(assigns, %{value: nil, icon: nil, class: nil, event: nil}) 

    <dt class={"hidden toggle lg:block #{@class}"} phx-click={@event}><%= @label %. 
    <dd class="self-center hidden toggle lg:block justify-self-end"><%= @value %>. 

this is code of summary_block/1 component

You should be using LiveView’s assign instead of Enum.into to update assigns. It’s required for change tracking which I’m imaging is what is wrong. See here.


It looks like change tracking is breaking. I’d suggest reading through the guide Assigns and HEEx templates — Phoenix LiveView v0.18.18.


Thanks for your quick help and for letting me know the correct way. :heart:

1 Like