Redux 表单无法输入

Redux form cannot type

我无法输入redux form的文本输入法。 这是一个非常简单的形式

function Login({ handleSubmit, handleChange }) {
  const [username, setUsername] = useState(undefined);
  const [password, setPassword] = useState(undefined);

  const onSubmit = (e) => {
    console.log(e);
    console.log(username);
    console.log(password);
  };

  console.log(handleSubmit);
  return (
    <Container>
      <div className={styles.centered}>
        <div className={styles.form}>
          <div className={styles.title}>
            <H3>Login</H3>
          </div>
          <form onSubmit={() => handleSubmit(onSubmit)} className={styles.flexColumn}>

            <div className={styles.username}>
              <P>username</P>
              <Field name="username" component="input" type="text" className={styles.input} />
            </div>

            <div className={styles.password}>
              <P>password</P>
              <Field name="password" component="input" type="password" className={styles.input} />
            </div>

            <div className={styles.downSection}>
              <Flex>
                <P>
                Serve Aiuto?
                </P>
                <a href="#">
                  <div className={styles.contactLink}>
                    <P>Contattaci</P>
                  </div>
                </a>
              </Flex>
              <Button type="submit" text="Accedi" />
            </div>
          </form>
        </div>
      </div>
    </Container>
  );
}

const mapDispatchToProps = {
  login: loginAction,
};

const enhance = compose(
  connect(null, mapDispatchToProps),
  reduxForm({ form: 'login' }),
);

export default enhance(Login);

handleSubmit 不起作用,我不能console.log任何东西。 我试图查看文档并尝试在 SO 上搜索一些答案,但我没有找到答案。

你能告诉我错误在哪里吗?谢谢。

首先尝试处理事件

 <form onSubmit={onSubmit} className={styles.flexColumn}>

之后尝试在函数 onsubmit 中使用 this 并删除 const

 onSubmit(event){
console.log(e);
console.log(username);
console.log(password);
   this.handleSubmit(event.target.value);
  };

所以试一试,让我们把 enhance 排除在外,老实说我不知道​​它的作用所以让我们试试这种类型的登录配置,我们将组件变成 class-based 一个无论如何,这是一个很好的做法,因为您正在接收用户的输入。

我知道您正在使用 useState,这是 React 的一些很酷的新功能,但我建议将一个不那么复杂和传统的设置与 class-based 组件放在一起像这样:

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

class Login extends Component {
  render() {
    return (
      <form>
        <fieldset>
          <label>Email</label>
          <Field
            name="email"
            type="text"
            component="input"
        
          />
        </fieldset>
        <fieldset>
          <label>Password</label>
          <Field
            name="password"
            type="password"
            component="input"

          />
        </fieldset>
      </form>
    );
  }
}

export default reduxForm({ form: "login" })(Login);

使用它来检查您现在是否可以输入您的输入,然后开始重新添加内容并每次测试它,直到找到问题的原因。

经过几个小时和一个特别的错误修复之夜后,我发现了问题:

它在一次导入中,正好:

import { Field, reduxForm } from 'redux-form/immutable';

而不是

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

这是完全出乎意料的,我很确定错误是在组件的主体中,而不是在导入中。

文件结构没问题。