类型“IntrinsicAttributes & IntrinsicClassAttributes<FormInstance<, Partial<ConfigProps<

Posted

技术标签:

【中文标题】类型“IntrinsicAttributes & IntrinsicClassAttributes<FormInstance<, Partial<ConfigProps<, >> -Redux 表单上不存在属性“isLoading”【英文标题】:Property 'isLoading' does not exist on type 'IntrinsicAttributes & IntrinsicClassAttributes<FormInstance<, Partial<ConfigProps<, >> -Redux form类型“IntrinsicAttributes & IntrinsicClassAttributes<FormInstance<, Partial<ConfigProps<, >> -Redux 表单上不存在属性“isLoading” 【发布时间】:2018-07-16 23:50:18 【问题描述】:

我有一个容器组件和一个表单组件:

表单组件:

import * as React from 'react';
import  reduxForm, Field, InjectedFormProps  from 'redux-form';

export type LoginState = 
  email: string;
  password: string;
;

interface LoginProps extends InjectedFormProps 
  isLoading: boolean;
  onSubmit(userCredential: LoginState): void;


class Login extends React.Component<LoginProps, LoginState> 
  constructor(props: LoginProps) 
    super(props);
    this.state = 
      email: '',
      password: '',
      otp: '',
    ;
  
  onEmailChange = (e: React.FormEvent<htmlInputElement>) => 
    this.setState( email: e.currentTarget.value.trim() );
  ;

  onPasswordChange = (e: React.FormEvent<HTMLInputElement>) => 
    this.setState( password: e.currentTarget.value.trim() );
  ;

  onSubmit = () => 
    this.props.onSubmit(this.state);
  ;

  render() 
    return (
      <div>
        <h3 className="ac-section__title">Login</h3>
        <div className="ac-section__body">
          <form onSubmit=this.props.handleSubmit(this.onSubmit)>
            <Field
              name="email"
              placeholder="Email"
              component=renderInput
              type="email"
              value=this.state.email
              onChange=this.onEmailChange
              validate=[required, email]
            />
            <Field
              name="password"
              placeholder="Password"
              component=renderInput
              type="password"
              value=this.state.password
              onChange=this.onPasswordChange
              validate=required
            />
            <br />
            <div className="loginBtnContainer">
              <button className="btn primaryButton" type="submit">
                Login
              </button>
            </div>
          </form>
          <div className="ac-password__wrapper">
            <Link to="/forgot-password" className="ac-password-link">
              Forgot your password?
            </Link>
          </div>
        </div>
      </div>
    );
  


export default reduxForm( form: 'loginForm' )(Login);

容器组件:

return (
      <div>
         <Login onSubmit=this.onSubmit isLoading=true />  
         /* here throwing error: Property 'isLoading' does not exist on type 'IntrinsicAttributes & IntrinsicClassAttributes<FormInstance<, Partial<ConfigProps<, >>>> & ...'. */

      </div>
    );

这里isLoading 没有作为道具传递给表单组件。请帮我找出一个好的解决方案。

谢谢:)

【问题讨论】:

你能检查一下你是否为redux-form安装了typings或@types吗?如果是,请尝试删除它们,否则尝试安装它们。我发现在某些情况下,打字会导致比解决问题更多的问题 【参考方案1】:

Redux Form 是在 React + Redux 环境中进行表单处理和验证的一种非常有效的方法。在这里,您遇到的问题似乎与缺少道具和一些接口定义有关。最后我提供了一个沙箱。

一个解决办法是自己指定表单界面,像这样:

export interface FormInterface 
  handleSubmit: PropTypes.func; 
  handleChange?: PropTypes.func;
  reset?: PropTypes.func;
  pristine?: PropTypes.bool;
  submitting?: PropTypes.bool;
  error?: PropTypes.bool;
  invalid?: PropTypes.bool;
  submitSucceeded?: PropTypes.bool;
  submitFailed?: PropTypes.bool;
  anyTouched?: PropTypes.bool;

并使用它来派生LoginProps。然后 typescript 就不会抱怨缺少 props,这显然是 redux 表单的工作方式。

详情请参阅sandbox。我也为你介绍了一些小东西。

希望这会有所帮助。

【讨论】:

我按照你的建议实现了这个,但是由于类型定义,PropTypes 上没有定义像 func 这样的问题。 如果你把代码sn-p贴在这里,我可以看看 请检查:codesandbox.io/s/5045y9pj84 我在第 1 行遇到错误。 hello.tsx 文件中的 111 请将鼠标悬停在登录上(导出默认 reduxForm( form: "loginForm" )(Login))。你会看到我得到的错误。

以上是关于类型“IntrinsicAttributes & IntrinsicClassAttributes<FormInstance<, Partial<ConfigProps<的主要内容,如果未能解决你的问题,请参考以下文章

c#中值类型和引用类型的区别

MySQl数据类型

值类型和引用类型

TS 基本类型分类any 类型

MySQL数据类型 - 数字类型 - 数字类型语法

js简单类型与复杂类型