首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从react-hook-form + Redux进行调度

如何从react-hook-form + Redux进行调度
EN

Stack Overflow用户
提问于 2019-12-06 23:26:57
回答 2查看 5.6K关注 0票数 3

我使用的是react-hook-form (https://react-hook-form.com/)。我想从react-hook-form内部分派操作。

在下面的例子中,当onSubmit被触发时,我应该使用props.dispatch进行调度。

然而,我不知道如何通过setState分派和更新状态。

代码语言:javascript
复制
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>
  )
}

有没有人给我个建议?

代码语言:javascript
复制
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);
EN

回答 2

Stack Overflow用户

发布于 2019-12-06 23:43:36

使用带redux的分派与react-hook-form库无关。

如果您使用的是redux-hooks,这就是an alternative for connect,如果您在react-hook-form中使用钩子,那么这是一种更好的方法

React的新“挂钩”API为函数组件提供了使用本地组件状态、执行副作用等功能。

React Redux现在提供了一组钩子API,作为现有connect()高阶组件的替代。这些API允许您订阅Redux存储和分派操作,而不必将组件包装在connect()中。

代码语言:javascript
复制
import { useDispatch } from 'react-redux';
function App() {
  const dispatch = useDispatch();
  // use distpach
}

如果您使用connect

代码语言:javascript
复制
import { connect } from 'react-redux';
function App({ dispatch }) {
  // use dispatch
}

export default connect()(App);
票数 5
EN

Stack Overflow用户

发布于 2019-12-09 12:59:58

我想通了。我正在使用combineReducers。它分心了。我应该像下面这样写。

代码语言:javascript
复制
combineReducers({
    sample01: sample01Reducer, sample02: sample02Reducer,    //Reducers
代码语言:javascript
复制
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);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59215958

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档