在
mount
方法中,我第一次调用 RSS feed 并渲染它返回的所有结果。在 handle_info
方法中,我每 5 秒执行一次 Process.send_after
调用来检索相同的 RSS 提要。 RSS 源包含 mount
期间返回的原始项目,但也包含 mount
期间未返回的新项目。
通过此实现,初始
mount
中呈现的列表只会被 handle_info
中的项目覆盖。如何在 html/heex 中仅追加新项目并保留现有项目,以便 UI 显示不断增长的项目列表?
无需太多上下文,我相信您可以在LiveView 文档的基本示例中找到答案。
您需要将 RSS 提要项目保留在 LiveView 的分配中。您可以设置初始项目并在安装期间安排第一次更新
def mount(_params, _session, socket) do
if connected?(socket), do: Process.send_after(self(), :update_from_feed, 5_000)
items = call_rss_feed()
{:ok, assign(socket, :rss_items, items}
end
并在
handle_info
中相应地更新分配:
def handle_info(:update_from_feed, socket) do
new_items = call_rss_feed()
# here you need to add the logic of merging socket.assigns.items and new_items
items = ...
{:noreply, assign(socket, :items, items)}
end