Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 行动赢得';t使用Redux表单进行调度,无论是否连接_Javascript_Reactjs_React Redux_React Redux Form - Fatal编程技术网

Javascript 行动赢得';t使用Redux表单进行调度,无论是否连接

Javascript 行动赢得';t使用Redux表单进行调度,无论是否连接,javascript,reactjs,react-redux,react-redux-form,Javascript,Reactjs,React Redux,React Redux Form,我正在学习react和redux,它们本身是很好的,但在redux形式上我遇到了障碍 我有以下表格: import React, { Component } from 'react'; import { reduxForm, Field } from 'redux-form'; import { connect } from 'react-redux'; import { updateAuthToken } from '../actions/index'; class FormAuthUpda

我正在学习react和redux,它们本身是很好的,但在redux形式上我遇到了障碍

我有以下表格:

import React, { Component } from 'react';
import { reduxForm, Field } from 'redux-form';
import { connect } from 'react-redux';
import { updateAuthToken } from '../actions/index';

class FormAuthUpdate extends Component {
  render() {
    const { handleSubmit } = this.props;

    return(
      <form onSubmit={handleSubmit} className="form-inline">
        <div className="form-group">
          <label htmlFor="authToken">New Auth Token </label>
          <Field component="input" type="text" name="authToken" className="form-control" />
        </div>
        <button className="btn btn-primary" type="submit">Set</button>
      </form>
    );
  };
}

FormAuthUpdate = reduxForm({ form: 'AuthUpdateForm', onSubmit: updateAuthToken })(FormAuthUpdate);
export default connect( undefined, { updateAuthToken })(FormAuthUpdate);
和相关减速器:

import { UPDATE_AUTH_TOKEN } from '../actions/index';

const INITIAL_STATE = { authToken: "" };

export default function(state = INITIAL_STATE, action) {
  console.log("reducer: " + JSON.stringify(action.type));
  switch(action.type) {
    case UPDATE_AUTH_TOKEN:
      console.log("switch");
      return { ...state, authToken: action.payload.authToken };
    default:
      return state;
  }
}

通过日志,我能够确定表单是否成功提交,是否调用了updateAuthToken操作创建者,但该操作从未被调度。我已经用connect、unconnect、显式定义的matchDispatchToProps尝试过了,但仍然没有调度。我错过了什么?

我已经明白了!问题是在connect上实现mapDispatchToProps方法

以下是更新的组件:

import React, { Component } from 'react';
import { reduxForm, Field } from 'redux-form';
import { connect } from 'react-redux';
import { updateAuthToken } from '../actions/index';

class FormAuthUpdate extends Component {
  render() {
    const { handleSubmit, dispatch } = this.props;
    return(
      <form onSubmit={handleSubmit} className="form-inline">
        <div className="form-group">
          <label htmlFor="authToken">New Auth Token </label>
          <Field component="input" type="text" name="authToken" className="form-control" />
        </div>
        <button className="btn btn-primary" type="submit">Set</button>
      </form>
    );
  };
}

FormAuthUpdate = reduxForm({ form: 'AuthUpdateForm', onSubmit: updateAuthToken })(FormAuthUpdate);
export default connect( undefined, { onSubmit: updateAuthToken })(FormAuthUpdate);
以及“更新”的减速器:


正如您所看到的,除了删除一堆日志代码之外,并没有什么变化。溶液的肉在组件的最后一行。我没有将updateAuthToken函数绑定到dispatch,而是将表单的onSubmit函数(updateAuthToken的另一个实例)绑定到动作创建者。这导致表单提交、分派操作和全面成功完成。我希望这能帮助任何使用redux表单的人

我已经弄明白了!问题是在connect上实现mapDispatchToProps方法

以下是更新的组件:

import React, { Component } from 'react';
import { reduxForm, Field } from 'redux-form';
import { connect } from 'react-redux';
import { updateAuthToken } from '../actions/index';

class FormAuthUpdate extends Component {
  render() {
    const { handleSubmit, dispatch } = this.props;
    return(
      <form onSubmit={handleSubmit} className="form-inline">
        <div className="form-group">
          <label htmlFor="authToken">New Auth Token </label>
          <Field component="input" type="text" name="authToken" className="form-control" />
        </div>
        <button className="btn btn-primary" type="submit">Set</button>
      </form>
    );
  };
}

FormAuthUpdate = reduxForm({ form: 'AuthUpdateForm', onSubmit: updateAuthToken })(FormAuthUpdate);
export default connect( undefined, { onSubmit: updateAuthToken })(FormAuthUpdate);
以及“更新”的减速器:


正如您所看到的,除了删除一堆日志代码之外,并没有什么变化。溶液的肉在组件的最后一行。我没有将updateAuthToken函数绑定到dispatch,而是将表单的onSubmit函数(updateAuthToken的另一个实例)绑定到动作创建者。这导致表单提交、分派操作和全面成功完成。我希望这能帮助任何使用redux表单的人

MapStateToProps将dispatch作为一个道具传递,您可能会错过直接发送动作创建者的调用或使用bindActionCreators。我还以为connect应该在react redux中进行绑定,因此,抽象出bindActionCreators.MapStateToProps将dispatch作为一个道具传递给您,您可能会错过直接分派动作创建者的调用或使用bindActionCreators。我认为connect应该在react redux中进行绑定,从而抽象出bindActionCreators。
export const UPDATE_AUTH_TOKEN = "UPDATE_AUTH_TOKEN";

export function updateAuthToken(props) {
  return {
    type: UPDATE_AUTH_TOKEN,
    payload: props.authToken
  }
}
import { UPDATE_AUTH_TOKEN } from '../actions/index';

const INITIAL_STATE = { authToken: "" };

export default function(state = INITIAL_STATE, action) {
  switch(action.type) {
    case UPDATE_AUTH_TOKEN:
      return { ...state, authToken: action.payload };
    default:
      return state;
  }
}