Closed1

Next.js + TypeScript + Redux 複数state管理

フロントエンドえんじにゃーフロントエンドえんじにゃー

やりたいこと

  • 環境構築
  • Reduxで複数state管理

さらっと環境構築

npx create-next-app next-redux2
yarn add redux react-redux next-redux-wrapper redux-thunk
yarn add --dev typescript @types/react @types/node
js→ts, jsx→tsxへの拡張子変更
初期ファイルをtsに対応した記述に変更

Reduxで複数state管理

reducerを複数作って、combineReducersで結合。
1つになったreducerをcreateStore()に渡して、storeを作成する。

store.ts combineReducersの記述

store.ts

 import { notesReducer } from '@/duck/NewNoteInput/notesreducer'
 import { countReducer } from '@/duck/MyButton/countReducer'
 import { combinReducers, createStore } from 'redux'
 
 const rootReducer = combineReducers({
   notesReducer: notesReducer,
   countReducer: countReducer,
 })
 
 export type RootState = ReturnType<typeof rootReducer>
 export const store = createStore(rootReducer)

index.tsxやMyButton.tsxの型定義を変更

index.tsx

 import { FC } from 'react'
 import { useDispatch, useSelector } from 'react-redux'
 import { CountState } from '@/duck/MyButton/countReducer'
 import { countIncrement } from '@/duck/MyButton/action'
 import { RootState } from '@/store'
 import MyButton from '@/components/MyButton'
 
 const Home: FC = () => {
   const counter = useSelector<RootState, CountState['counter']>((state: RootState) => state.countReducer.counter)
   
   const dispatch = useDispatch()
 
   const handleCountUpBtn = (value: number) => {
     dispatch(countIncrement(value))
   }

参考

https://note.com/fz5050/n/n6f5b43355493

このスクラップは2022/09/15にクローズされました