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?}) 

 ~H""" 
  <.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 %> 
  """ 
end

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

Problem:
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}) 

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

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.

4 Likes

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

2 Likes

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

1 Like