前提・実現したいこと
React + TypeScriptにてSPAを作っており、React HooksとRedux Toolkitで状態管理を行っています。
発生している問題・エラーメッセージ
useStateにて状態の初期値は取得出来るのですが、useDispatchによるactionが実行されません。
ログイン状態を管理しようと試みていたのでstoreのファイル名がauth.tsになっておりますが、中身はデバッグのためのコードです。
useDipatchのアクションが動いていればコンソール表示は
Initial state: hoge Action: fuga Update state: fuga
と期待出来るはずですが、以下の状態でございます。
該当のソースコード
# pages/SignUp/index.tsx import React from 'react'; import { useDispatch, useSelector } from "react-redux"; import { googleSignup } from "../../stores/auth"; function SignUp() { const dispatch = useDispatch(); const hoge = useSelector<any>(state => state.auth.name); function handleSubmit() { console.log('Initial state: ' + hoge) dispatch(googleSignup) console.log('Update state: ' + hoge) } return ( <div> <h1>SignUp</h1> <button onClick={handleSubmit}>Google Sign-up</button> </div> ) } export default SignUp
# stores/auth.ts import { createSlice } from '@reduxjs/toolkit'; export type State = { name: string } const initialState: State = { name: 'hoge' }; const slice = createSlice({ name: 'auth', initialState, reducers: { googleSignup(state: State) { state.name = 'fuga' console.log('Action:' + state.name) } } }); export const { googleSignup } = slice.actions; export default slice.reducer;
# /index.ts import React from 'react'; import ReactDOM from 'react-dom'; import { Provider } from "react-redux"; import Store from "./stores/"; import Router from './routes'; interface Props {} const App = ({}: Props) => { return <Router />; }; ReactDOM.render( <React.StrictMode> <Provider store={Store}> <App /> </Provider> </React.StrictMode>, document.getElementById('root') );
# stores/index.ts import { combineReducers } from "redux"; import { configureStore } from "@reduxjs/toolkit"; import authReducer from "./auth"; const reducer = combineReducers({ auth: authReducer }); const Store = configureStore({ reducer }); export type RootState = ReturnType<typeof reducer> export type AppDispatch = typeof Store.dispatch export default Store;
試したこと
Redux Toolkitの公式を参照しつつ、以下の記事と動画を参考にさせていただきながら実装いたしました。
- HookとRedux ToolkitでReact Reduxに入門する
- Redux Toolkit でもっと簡単に状態管理する方法-前編 : TypeScriptでReact.js入門#05
- Redux Toolkit でもっと簡単に状態管理する方法-後編 : TypeScriptでReact.js入門#06
補足情報(FW/ツールのバージョンなど)
関連モジュールのバージョンは以下の通りです。
"react": "^16.13.1", "react-dom": "^16.13.1", "react-redux": "^7.2.0", "react-router": "^5.2.0", "react-router-dom": "^5.2.0" "react-scripts": "3.4.1", "redux": "^4.0.5", "@reduxjs/toolkit": "^1.3.6", "typescript": "~3.7.2"
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/28 09:18