react-hook-formを使用して画面遷移をしようとしています。
今回react-hook-formを使用していることで、InputForm内にて、dispatch と setState 実行するべきだと考えています。dispatch はできたのですが、setStateがうまく行きません。
import React, { Component } from "react"; import { connect } from "react-redux"; import InputForm from "./inputForm"; import ConfirmForm from "./comfirmForm"; class Sample extends Component { constructor(props){ super(props); this.state = { mode: 'input' } } render() { switch (this.state.mode) { case 'input': return (<InputForm />); case 'confirm': return (<ConfirmForm />); default: return (<InputForm />); } } } export default connect((state)=>state)(Sample);
import React from 'react' import { connect } from "react-redux"; import useForm from 'react-hook-form' import {Link} from "react-router-dom"; function InputForm(props) { const { register, handleSubmit, watch, errors } = useForm(); const onSubmit = data => { console.log(data); props.dispatch({type: 'CONFIRM'}); }; return ( <div> <form onSubmit={handleSubmit(onSubmit)}> <label>Last Name:</label> <input type="text" name="last_name" ref={register}/> <label>First Name:</label> <input type="text" name="first_name" ref={register}/> <input type="submit" value="更新"/> </form> <Link to={"/"}>戻る</Link> </div> ); } export default connect((state)=>state)(InputForm);
const initData = { mode: 'input' } export function pageReducer(state = initData, action){ console.log('page04Reducer:TYPE: ' + action.type) switch (action.type) { case 'INPUT': return {mode: 'input'}; case 'CONFIRM': return {mode: 'confirm'}; default: return state; } }
とりあえず、コードを眺めてみて、ご指摘があるところがありますでしょうか?
問題点は、setState で、mode が更新できずに、Sample class の render内の制御がうまく行かないことです。
ご指摘お願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/09 01:21 編集
2019/12/09 01:40
2019/12/09 02:44 編集
2019/12/09 03:04
2019/12/09 03:18
2019/12/09 03:23