前提・実現したいこと
react+redux+typescriptで簡単なアプリをつくっています
reduxを使い始めたばかりなので様々なサイトを参考に試しましたがinputで得た値をstateに取り込むことができません
エラーメッセージは出ませんが初期値から変化がありません
該当のソースコード
type IApp ={ email:string, password:string, count:number, changeEmail: (email: string) => void, changePassword: (password:string)=> void }&RouteComponentProps; class App extends React.Component<IApp, {}> { handleEmailChange(e: React.FormEvent<HTMLInputElement>) { e.preventDefault(); this.props.changeEmail( e.currentTarget.value) ) }; handlePassChange(e: React.FormEvent<HTMLInputElement>) { e.preventDefault(); this.props.changePassword( e.currentTarget.value ) }; handleSubmit(e: React.FormEvent<HTMLFormElement>) { e.preventDefault(); this.props.history.push('/signin') }; render() { return( <div> <h1>サインイン</h1> <form onSubmit={e=>this.handleSubmit(e)} > <input onChange={ e=>this.handleEmailChange(e)}/> <input onChange={e=>this.handlePassChange(e)} /> <button type="submit" > ログイン </button> </form> </div> ) }; } export type MainState = ReturnType<typeof store.getState>; const mapStateToProps = (state: MainState) => { return { email: state.email, password:state.password, }; }; type ActionType = { type: string, payload: string | number }; const mapDispatchToProps = (dispatch: ThunkDispatch<IApp,undefined,ActionType>): IDispatchToProps => { return { changeEmail: (email: string) => { dispatch(changeEmail(email)); }, changePassword: (password: string) => { dispatch(changePassword(password)); }, }; }; export default withRouter(connect(mapStateToProps, mapDispatchToProps )(App));
//reducer const initCountState: ICountState = { count: 0 , email:"", password:"", } export const loginReducer=( state:ICountState=initCountState, action:LoginAction)=> { switch (action.type) { case 'changeEmail': return ( Object.assign({}, state, {email: action.payload.email}) ); case 'changePassword': return ( Object.assign({}, state, {password: action.payload.password}) ); default: return state; } } const createRootReducer = (history) => combineReducers({ login:loginReducer, countState:countReducer, router: connectRouter(history), }); export default createRootReducer;
export const changeEmail = (text) => { return { type: 'changeEmail', payload: text }; }; export const changePassword = (text) => { return { type: 'changePassword', payload: text }; }; export type LoginAction = IEmailAction | IPasswordAction; export interface IEmailAction extends Action { type: 'changeEmail'; payload: { email: string; }; } export interface IPasswordAction extends Action { type: 'changePassword'; payload: { password: string; }; }
formをsubmitしても{email:'',password:'',count:0}の初期値のままになります
関係ありそうな部分だけ抜粋しました
エラーは出ないためimportなどのミスではないと思います
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/10/07 02:06
2019/10/07 04:22
2019/10/07 04:40
2019/10/07 04:45