Redux 表单无法输入

Posted

技术标签:

【中文标题】Redux 表单无法输入【英文标题】:Redux form cannot type 【发布时间】:2019-10-21 19:33:33 【问题描述】:

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

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 上搜索一些答案,但我没有找到答案。

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

【问题讨论】:

【参考方案1】:

所以试一试,让我们离开enhance,老实说,我不知道它是做什么的,所以让我们尝试这种类型的登录配置,我们将组件转换为基于类的组件,这是一个很好的做法,因为您正在接收来自用户的输入。

我确实意识到您正在使用 useState,这是 React 的一些很酷的新功能,但我建议将一个不太复杂和传统的设置与基于类的组件组合在一起,如下所示:

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);

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

【讨论】:

【参考方案2】:

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

它是在一次导入中,确切地说:

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

而不是

import  Field, reduxForm  from 'redux-form';

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

文件的结构没问题。

【讨论】:

【参考方案3】:

尝试先处理事件

 <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);
  ;

【讨论】:

您好,感谢您的帮助:如果我尝试仅在 onSubmit 上启动,我可以在其中看到 console.log(具有未定义的值)。但我无法在文本输入中输入任何内容

以上是关于Redux 表单无法输入的主要内容,如果未能解决你的问题,请参考以下文章

无法通过 React 和 Redux 将相同的表单组件用于添加或编辑模式

如何将 redux-form 绑定连接到表单的输入

如何将 react-datepicker 与 redux 表单一起使用?

材料ui的自定义输入中的Redux表单不起作用

无法使用handleSubmit捕获Redux表单字段值

使用 Redux Form 的表单输入未更新