我正在使用react-hook-form(https://react-hook-form.com/)。 我想从react-hook-form内部调度动作。
在以下情况下,当onSubmit被触发时,我应该使用props.dispatch
进行调度。
但是我不知道如何通过setState分配和更新状态。
import React from 'react'
import useForm from 'react-hook-form'
export default function App(props) {
const { register, handleSubmit, watch, errors } = useForm()
const onSubmit = data => {
console.log(data);
props.dispatch({type: 'CONFIRM'}); //--> Worked!!
}
console.log(watch('example')) // watch input value by passing the name of it
return (
<form onSubmit={handleSubmit(onSubmit)}>
<input name="example" defaultValue="test" ref={register} />
<input name="exampleRequired" ref={register({ required: true })} />
<input type="submit" />
</form>
)
}
有人给我建议吗?
class Sample extends Component {
constructor(props){
super(props);
this.state = {
mode: 'input'
}
}
render() {
switch (this.state.mode) {
case 'input':
return (<App />);
case 'confirm':
return (<App01 />);
default:
return (<App02 />);
}
}
}
export default connect((state)=>state)(Sample);
答案 0 :(得分:2)
在redux中使用调度与react-hook-form
库无关。
如果您使用redux-hooks
(即an alternative for connect
),并且如果还是使用react-hook-form
的钩子,则是一种更好的方法:
React的新“挂钩” API使功能组件能够使用本地组件状态,执行副作用等。
React Redux现在提供了一组挂钩API,以替代现有的connect()高阶组件。这些API允许您订阅Redux存储和调度操作,而不必将组件包装在connect()中。
import { useDispatch } from 'react-redux';
function App() {
const dispatch = useDispatch();
// use distpach
}
如果您使用connect
:
import { connect } from 'react-redux';
function App({ dispatch }) {
// use dispatch
}
export default connect()(App);
答案 1 :(得分:1)
我想通了。
我正在使用combineReducers
。分心。
我应该写如下。
combineReducers({
sample01: sample01Reducer, sample02: sample02Reducer, //Reducers
class Sample extends Component {
constructor(props){
super(props);
this.state = {
mode: 'input'
}
}
render() {
switch (this.props.sample01.mode) {
case 'input':
return (<App />);
case 'confirm':
return (<App01 />);
default:
return (<App02 />);
}
}
}
export default connect((state)=>state)(Sample);