問題タブ [phoenix-live-view]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
0 に答える
106 参照

elixir - 1 つの PubSub イベントに基づいてすべての Phoenix LiveView ソケットを更新する

いくつかの通知を購読している Phoenix LiveView アプリがあるとします。_header.html.eexすべての LiveViewは、メニューやその他のものとともに、テンプレートを介してアイコンで新しい通知の数を表示します。

すべての LiveView で通知アイコンを最新の状態に保つには、PubSub にサブスクライブし、ソケット割り当てをリアルタイムで更新するメカニズムが必要です。

すべてのライブビューで同じものをカットアンドペーストすることなく、それらすべてをグローバルに更新する方法はありhandle_infoますか?

0 投票する
2 に答える
263 参照

authentication - 非ライブビュー ページにリダイレクトされた後、このライブビューが再びマウントされるのはなぜですか?

私は、主に と から新たに生成された Web アプリであるプロジェクトで作業していphx.newますphx.gen.auth。ライブビューではないインデックス ページがあります。ログイン後、ユーザーはライブビューであるメイン ページにリダイレクトされます。

期待:生成されたLog outリンクをクリックした後、ユーザーは/、ライブビューではないインデックス ページにリダイレクトされる必要があります。この動作は、生成された認証によって指定されます。

経験:問題は、生成されたLog outリンクをクリックすると、生成された認証が行うように書かれているように、ログアウトしたインデックス スプラッシュ ページにリダイレクトされるのではなく、代わりにログイン ページにリダイレクトされ、そこで 2 つのフラッシュが表示されることです。メッセージ::infoログアウトの成功を示す 1 回のフラッシュと、:error「このページにアクセスするにはログインする必要があります」という不平を言う 2 回目のフラッシュ。:errorログイン ページでそのフラッシュをユーザーに見せたくありません。さらに悪いことに、事実は:errorフラッシュが表示される理由PageLiveは、インデックス ページに存在しないライブビューがそのmount/3機能を再度 (3 回目) 実行しているためであり、これによりライブビュー認証が再度実行され、2 回目のリダイレクトが発生します。この問題が発生しますつまり、リダイレクトが正しく機能し、問題なくユーザーをインデックス ページに送信する場合もあれば、2 回目の冗長なリダイレクトと誤ったフラッシュ メッセージが表示される場合もあります。これはある種の競合状態を示していると思います。

これらのルートを使用して比較的新しく生成されたプロジェクトがあります(特に):

router.ex

認証は によって生成されましたphx.gen.auth。生成されたdeleteアクションは、生成されたをUserSessionController起動させますUserAuth.log_out_user/1

user_session_controller.ex

user_auth.ex

liveview docsで推奨されているように、ルーター内/dashの liveview と呼ばれる liveview を介してルーティングします。PageLive

page_live.ex

user_live_auth.ex

ユーザーがログアウトをクリックした後のプロセスのログは次のとおりです。

上記のログで、302 リダイレクトが発生し、すぐにソケットが再接続してmount/3実行され、今度は/users/log_inルートへの別のリダイレクトがトリガーされることに注目してください。私が理解している限り、ソケットはここで再接続を試みるべきではなく、何がこれを引き起こしているのかわかりません。

PageLiveログアウト時に非ライブビュー ページへの 302 リダイレクトの後に再度マウントがトリガーされ、ログイン ページへの 2 回目のリダイレクトがトリガーされるのはなぜですか?