I am trying to add a item in the list like this.
In context module.
def create_message(%Message{} = message, attrs) do
message
|> Message.changeset(attrs)
|> Repo.insert()
|> broadcast(:new_message)
end
@topic __MODULE__
def broadcast({:ok, message}, event) do
Phoenix.PubSub.broadcast(MyApp.PubSub, @topic, {event, message})
{:ok, message}
end
in liveview module
def mount(_params, _session, socket) do
if connected?(socket), do: Messages.subscribe()
messages = Messages.get_messages()
socket = assign(socket, :messages, messages)
{:ok, socket, temporary_assigns: [messages: []]}
end
def handle_info({:new_message, new_message}, socket) do
socket = update(socket, :messages, fn messages -> [new_message | messages] end)
{:noreply, socket}
end
So When I create a new message, handle_info
receives a new message but
socket.assigns.messages is empty list.
I think I did temporary_assigns
for messages
If i remove temporary_assigns
, it shows whole messages and prepending new message.
I don’t want to keep whole messages in memory that’s why I use temporary_assigns
What am i doing wrong?