[解決済み] Next.jsでReduxを使うのはアンチパターンか?
質問
Next.jsのアプリを作っているのですが、現在Reduxを使っています。構築しながら、Reduxの使用が本当に必要なのか、またその使用は実はアンチパターンなのではないかと考えています。以下は私の推論です。
Next.jsでReduxストアを適切に初期化するためには、カスタムな
App
コンポーネントに
getInitialProps
メソッドを使用します。このようにすることで
自動静的最適化
が提供するものです。
これに対して、クライアントサイドでAppをマウントした後にReduxを組み込むと、サーバーサイドのナビゲーションのたびにReduxストアがリセットされます。たとえば、クライアントサイドでReduxストアを初期化するNext.jsアプリがありますが、次のようなダイナミックルートにルーティングすると、Reduxストアはリセットされます。
pages/projects/[id]
そのページはサーバーサイドでレンダリングされ、ストアにあった情報を再取得する必要があります。
私の疑問は
- このような状況で、Reduxストアを利用するメリットは何でしょうか?
-
ルートでストアを初期化する必要があります
App
コンポーネントを使用し、自動静的最適化を見送ることができますか? -
Next.js 9.3 で状態を管理するために、より良い方法はありますか?
getStaticProps
と その他のデータ取得方法 - 何か見逃していませんか?
解決方法は?
<ブロッククオートカスタムアプリでgetInitialPropsを使用している場合、自動的な Next.jsが提供する静的最適化はすべて無効になります。 ページがあります。
この方法に従えば、本当です。
もっといい方法はないのでしょうか?
はい、Redux Providerをラッパーとして作成し、必要なコンポーネントをラップすれば、reduxコンテキストは自動的に初期化され、そのコンポーネント内で提供されます。
例
const IndexPage = () => {
// Implementation
const dispatch = useDispatch()
// ...
// ...
return <Something />;
}
IndexPage.getInitialProps = ({ reduxStore }) => {
// Implementation
const { dispatch } = reduxStore;
// ...
// ...
}
export default withRedux(IndexPage)
アプリ全体の最適化を無効にすることなく、状態管理が必要なページのみReduxを使用することができるようになりました。
ご質問の回答です。 Next.jsでReduxを使用することはアンチパターンでしょうか? ということです。
いいえ、しかし適切に使用する必要があります。
詳細はこちらをご覧ください。 https://github.com/vercel/next.js/tree/canary/examples/with-redux
ご参考になれば幸いです。
関連
-
[解決済み】React 17で動作するEnzymeアダプターはどれですか?
-
[解決済み] SVGサークル内の画像にボーダーを追加する方法
-
[解決済み] Webpack + Babelです。プリセット "es2015 "がディレクトリに相対して見つからなかった
-
[解決済み] nginxでcertbotを使用する際の問題点
-
[解決済み] は、gatsby-imageで動作する良いreactのカルーセルコンポーネントはありますか?[って聞かれます。]
-
[解決済み] react-router-domを使用する際に「Function components cannot be given refs」を回避する方法は?
-
[解決済み] Reactルータを使ったプログラムによるナビゲーション
-
[解決済み] Reduxのアクションをタイムアウトでディスパッチする方法とは?
-
[解決済み] Reduxの非同期フローになぜミドルウェアが必要なのか?
-
[解決済み] ES6 ジェネレータで redux-saga を使用する利点/欠点と ES2017 async/await で redux-thunk を使用する利点/欠点
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Warning.Itが表示されるのはなぜですか?Functions are not valid as a React child?
-
[解決済み] error 'document' is not defined : eslint / React
-
[解決済み] configuration.module に未知のプロパティ 'loaders' があります。
-
[解決済み] Webpack + Babelです。プリセット "es2015 "がディレクトリに相対して見つからなかった
-
[解決済み] 非必須項目に対するYupバリデーション
-
[解決済み] reactstrapのドロップダウンで選択されたアイテムを設定する方法は?
-
[解決済み] カスタマイズ素材UI チェックした場合としない場合の切り替え
-
[解決済み] react.jsでng-ifに相当するものは何ですか?
-
[解決済み] componentWillReceivePropsライフサイクルメソッドはいつ使用するのですか?
-
[解決済み] Reactでグローバル変数を宣言する方法とは?