在React js

时间:2017-07-06 05:54:14

标签: reactjs redux redux-form

我试图在react js中做一些表单验证,而使用redux表单面临一个错误字段必须在用reduxForm()装饰的组件内。 我刚刚在网上搜索过这个错误,但没有得到任何解决方案。 参考链接:http://redux-form.com/6.8.0/examples/simple/。 这是我的代码,



import React, { Component } from 'react';
import { Field, reduxForm } from 'redux-form';

export class EditProfile extends Component {
  render() {
    console.log("hello welcome");
    const { handleSubmit, pristine, reset, submitting } = this.props;
    return (
      <form onSubmit={handleSubmit}>
        <div>
          <label htmlFor="firstName">First Name</label>
          <Field name="firstName" component="input" type="text"/>
        </div>
      </form>
    );
  }
}


export default reduxForm({
  form: 'editForm' 
})(EditProfile)
&#13;
&#13;
&#13;

我在代码中做错了,有人可以澄清我。

3 个答案:

答案 0 :(得分:9)

您有默认导出(使用reduxForm修饰)和命名导出(未装饰)。

我假设您正在导入您的表单,如下所示:

import { EditProfile } from 'EditForm'; // Using named export

相反,您需要导入默认值:

import EditProfile from 'EditForm'; // Default export

从技术上讲,没有任何错误,当您从同一个文件中导出两者时,babel并不会抱怨。在某些情况下,输出两者都是有意义的(例如出口未修饰的出于测试目的)。但在我的工作中,我更喜欢只有一个默认输出,以防止自己在脚下射击。

答案 1 :(得分:0)

import React, { Component } from 'react';
import { Field, reduxForm } from 'redux-form';
export class EditProfile extends Component {
  render() {
    console.log("hello welcome");
    const { handleSubmit, pristine, reset, submitting } = this.props;
    return (
      <form onSubmit={handleSubmit}>
        <div>
          <label htmlFor="firstName">First Name</label>
          <Field name="firstName" component="input" type="text"/>
        </div>
      </form>
    );
  }
}
EditProfile = reduxForm({
  form: 'editForm' 
})(EditProfile)
export default EditProfile;

答案 2 :(得分:0)

我也面临着同样的问题。解决方法是编辑/index.js 并添加以下代码行:

import { createStore, combineReducers } from 'redux';
import { Provider } from 'react-redux';
import { reducer as formReducer } from 'redux-form';

const rootReducer = combineReducers({
  form: formReducer,
});

const store = createStore(rootReducer);
ReactDOM.render(
  <Provider store={store}>
    <App />
  </Provider>,
  document.getElementById('root')
);
registerServiceWorker();