Reduxを使っているときのフォーム操作について
Reduxでのformデータの操作について悩んでいます。
setterのみのactionをわざわざ作るなら、コンポーネントにstateを持たせて送信するときだけactionをdispatchして更新したらダメなの?
と思ったのですがどうなんでしょうか?
Reducer・actionを使用しsetterを用意
const initialUser = { name: '', email: '', pass: '', } // Reducer const userForm = (state = initialUser, action) => { switch (action.type) { case actionType.CHANGE_NAME: { return { ...state, name: action.name } } case actionType.CHANGE_MAIL: { return { ...state, mail: action.email } } case actionType.CHANGE_PASS: { return { ...state, pass: action.pass } } default: return state } } export default userForm // ./actions export const actionType = { CHANGE_NAME:'CHANGE_NAME', CHANGE_EMAIL:'CHANGE_EMAIL', CHANGE_PASS:'CHANGE_PASS', } export const changeName = name => { return { type:actionType.CHANGE_NAME, name:name } } export const changeEmail = email => { return { type:actionType.CHANGE_EMAIL, email:email } } export const changePass = pass => { return { type:actionType.CHANGE_PASS, pass:pass } }
componentでstateとdispatchを呼んで処理
const Form = () => { const name = useSelector(state => state.userForm.name) const email = useSelector(state => state.userForm.email) const pass = useSelector(state => state.userForm.pass) const dispatch = useDispatch() return ( <input type="text" value={name} onChange={e => dispatch(changeName(e.target.value))} placeholder="...name" /> <input type="email" value={email} onChange={e => dispatch(changeEmail(e.target.value))} placeholder="...mail" /> <input type="password" value={pass} onChange={e => dispatch(changePass(e.target.value))} placeholder="...pass" /> ) } export default Form
componentでstateを用意してsetする
const Form = ()=> { const [ name, setName ] = useState('') // ...etc const doSubmit = e => { // ... } return ( <form onSubmit={doSubmit} <input type="text" value={name} onChange={e => setName(e.targt.value)} /> // ...etc <input type="submit" value"submit" /> <form/> // 送信するときに ) }
補足情報
React hooks, Redux hooks を使用しています。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/02/12 02:26
2020/02/12 03:23