前提・実現したいこと
SignInコンポーネントにstateをpropsとして渡す。
該当のソースコード
SignInコンポーネント↓
SignIntsx
1import * as React from 'react'; 2import { connect } from 'react-redux' 3import { logInIfFetchUser } from '../modules/ActionCreater' 4import { AppState } from '../modules/Reducers' 5 6 7type SignInProps = { 8 logInIfFetchUser: any 9 user: any 10} 11class SignIn extends React.Component<SignInProps> { 12 render(){ 13 let email: any 14 let password: any 15 16 return( 17 <div> 18 <h1>サインイン</h1> 19 <p>{this.props.user}</p> 20 <form onSubmit={(e) => { 21 e.preventDefault() 22 console.log(`searching user with email: ${email.value}, password: ${password.value}`) 23 this.props.logInIfFetchUser(email.value, password.value) 24 }}> 25 <input type='text' ref={node => email = node}/> 26 <input type='password' ref={node => password = node}/> 27 <button type='submit'>ログイン</button> 28 </form> 29 </div> 30 ) 31 } 32} 33 34const mapStateToProps = (state: AppState) => { 35 user: state.userReducer 36} 37 38export default connect(mapStateToProps,{ logInIfFetchUser })(SignIn) 39
Reducer↓
import * as React from 'react'; import { connect } from 'react-redux' import { logInIfFetchUser } from '../modules/ActionCreater' import { AppState } from '../modules/Reducers' type SignInProps = { logInIfFetchUser: any user: any } class SignIn extends React.Component<SignInProps> { render(){ let email: any let password: any return( <div> <h1>サインイン</h1> <p>{this.props.user}</p> <form onSubmit={(e) => { e.preventDefault() console.log(`searching user with email: ${email.value}, password: ${password.value}`) this.props.logInIfFetchUser(email.value, password.value) }}> <input type='text' ref={node => email = node}/> <input type='password' ref={node => password = node}/> <button type='submit'>ログイン</button> </form> </div> ) } } const mapStateToProps = (state: AppState) => { user: state.userReducer } export default connect(mapStateToProps,{ logInIfFetchUser })(SignIn)
Action↓
import * as React from 'react'; import { connect } from 'react-redux' import { logInIfFetchUser } from '../modules/ActionCreater' import { AppState } from '../modules/Reducers' type SignInProps = { logInIfFetchUser: any user: any } class SignIn extends React.Component<SignInProps> { render(){ let email: any let password: any return( <div> <h1>サインイン</h1> <p>{this.props.user}</p> <form onSubmit={(e) => { e.preventDefault() console.log(`searching user with email: ${email.value}, password: ${password.value}`) this.props.logInIfFetchUser(email.value, password.value) }}> <input type='text' ref={node => email = node}/> <input type='password' ref={node => password = node}/> <button type='submit'>ログイン</button> </form> </div> ) } } const mapStateToProps = (state: AppState) => { user: state.userReducer } export default connect(mapStateToProps,{ logInIfFetchUser })(SignIn)
Store↓
Storejs
1import { createStore } from 'redux' 2import { applyMiddleware } from "redux"; 3import thunk from 'redux-thunk'; 4import { createBrowserHistory } from 'history' 5import { routerMiddleware } from 'connected-react-router' 6import { rootReducer } from "./Reducers"; 7 8export const history = createBrowserHistory() 9 10export const store = createStore( 11 rootReducer(history), 12 applyMiddleware( 13 routerMiddleware(history), 14 thunk 15 ) 16) 17
発生している問題・エラーメッセージ
mapStateToPropsの引数state(store)には確かにuserReducerが入っています。
エディターで確認できました。
しかしuserReducerにカーソルを当ててみるとstateにはuserReducerが無いらしいのです
こちらはコンソールの結果です。mapStateToPropsはundifinedになってしまいました。
【追記】 Storeの構造、型を調べるためconsole.log(store.getState())
をindex.jsで実行したところ、コンソールの結果は次のようになりました。
確かにReducerは入っていて、それはmapStateToPropsでstate.userReducer.***として取り出せるはずと考えているのですが。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/10/12 17:56
2019/10/12 18:01