【Channels】React(Next.js)とDjangoアプリでリアルタイム更新処理を実装する

この記事では、Channelsモジュールを使用し、フロントサイドをReact(Next.js)、バックエンドをDjangoアプリでリアルタイム更新処理を実装する方法を解説します。

 

channelの実装の基本は公式ドキュメントで紹介されているチュートリアルの方法を利用し、フロントの実装内容をReact(Next.js)で行えるように編集しています。

最終的には、フロントからのイベントではなく、Djangoアプリ内部からのイベントにより、対象のフロントのページをリアルタイムで更新できるような実装とします。

◆動作検証環境

・ローカル環境:mac Catalina
・Python:3.8.9
・Django:4.2.1
・channels : 4.0.0
・channels-redeis : 4.1.0
・daphne : 4.0.0・ redis-server : 7.0.1
・Node:16
・React:React: 18
スポンサードリンク

バックエンドの実装(Django)

 

バックエンドは公式ドキュメントで紹介されている方法と同じ実装内容とします。

詳しいコード等は以下の記事を参考にしてください。

【Channels】Djangoアプリでリアルタイム更新処理を実装する

 

一部のファイルを編集します。

chat_test/chat/routing.py

動的なパスの設定から、固定のパスを利用します。

 

 

フロントサイドの実装(React)

 

npxコマンドでReactのプロジェクトを作成し以下のような構成とし、各ファイルを編集します。

 

 

対応するファイルを編集していきます。

src/index.js

 

src/App.js

 

src/components/TopPage.js

 

 

useRef()のhookを利用してwebsocketを扱っています。

これは再レンダリングされてもwebsocketの情報を保存しておくためです。

通常の変数はレンダリングの度に初期化されてしまいます。

 

フロントサイドの実装(Next.js)

Nextにて実装する場合も同じ方法となります。

Nextのプロジェクトを作成した後、pages/index.jsを以下の内容で編集します(ReactのTopPageと同じ内容です)

 

 

Djangoプロジェクト内でのwebsocket送信の実装

 

ピュアなJSでの実装同様、カスタムコマンドからReactの表示を変更する事ができます。

 

以上、Channelsを用い、ReactとDjangoアプリでリアルタイム更新処理を実装する方法を解説しました。