简体   繁体   English

使用 React Final Form 进行 Redux 调度

[英]Redux dispatch with React Final Form

I'm trying to understand why dispatch is not available in my actions to no avail.我试图了解为什么在我的操作中无法使用dispatch但无济于事。 Here is what I tried.这是我尝试过的。

import React, { Component } from 'react';

import { connect } from 'react-redux';
import { Field, Form } from 'react-final-form';

import { createProfile } from '../../actions/actions_members';

const onSubmit = async (values) => {
    createProfile(values)
}

const Signup = () => (
  <Form
    onSubmit={onSubmit}
    render={({ handleSubmit, submitting, pristine, values }) => (
        <form onSubmit={handleSubmit} >
            <label>Email:</label>
            <Field type='text' className='input' component="input" type="text" name='email'/>
            <label>Password:</label>
            <Field className='input' component="input" type="password" name='password' />
            {/*<label>Confirm password:</label>
            <input type='password' className='input' name='password' {...password} />*/}
            <button type="submit" disabled={submitting || pristine}>
              Submit
            </button>
        </form>
    )}
  />
)

export default connect()(Signup)

And here is my actions_members file这是我的actions_members文件

import * as C from './actions_const.js'

import { post, get } from '../helpers/apiConnection.js'

const createProfile = (value, dispatch) => {
    var data = {
      ep: "EP_SIGNUP",
      payload : {
        email: value.email,
        password: value.password
      }
    }
    post(data).then((result)=>dispatch({type:C.MEMBER_CREATE}));
}
export { createProfile }

I don't know how to pass dispatch to my createProfile action我不知道如何将dispatch传递给我的createProfile操作

You just have to pass it in from the onSubmit function.你只需要从onSubmit函数传入它。

const dispatch = useDispatch();

const onSubmit = async (values) => {
    createProfile(values, dispatch)
}

The other option would be to import the store in your action_members file and use store.dispatch, which amounts to the same thing.另一种选择是在您的 action_members 文件中导入 store 并使用 store.dispatch,这相当于相同的事情。

import * as C from './actions_const.js'

import { post, get } from '../helpers/apiConnection.js'

import store from '../whereverReduxStoreIsSetup.js';

const createProfile = (value) => {
    var data = {
      ep: "EP_SIGNUP",
      payload : {
        email: value.email,
        password: value.password
      }
    }
    post(data).then((result)=>store.dispatch({type:C.MEMBER_CREATE}));
}
export { createProfile }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM