You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Redux Form类型报错:'isLoading'属性不存在,组件传参问题求助

解决Redux Form的TypeScript类型错误:isLoading属性不存在

这个问题本质是TypeScript不知道你的表单组件接受isLoading这个自定义props,同时Redux Form的默认类型定义里也没有包含这个属性。咱们分三步来解决:

1. 给表单组件定义完整的Props类型

首先要明确表单组件需要接收的所有props:Redux Form注入的表单相关props,加上你自定义的isLoading。

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

// 第一步:定义你的表单字段类型(根据实际表单字段调整)
type FormFieldValues = {
  username: string;
  password: string;
  // 其他表单字段...
};

// 第二步:组合Redux Form注入的props和自定义的isLoading
type MyFormProps = InjectedFormProps<FormFieldValues> & {
  isLoading: boolean;
};

// 第三步:编写表单组件,使用定义好的Props类型
const LoginForm = ({ handleSubmit, isLoading }: MyFormProps) => (
  <form onSubmit={handleSubmit}>
    {/* 你的表单输入组件 */}
    <div>
      <label>用户名</label>
      <input name="username" type="text" />
    </div>
    <div>
      <label>密码</label>
      <input name="password" type="password" />
    </div>
    {/* 使用isLoading控制按钮状态 */}
    <button type="submit" disabled={isLoading}>
      {isLoading ? '提交中...' : '登录'}
    </button>
  </form>
);

// 用reduxForm包裹时,明确指定类型参数
export default reduxForm<FormFieldValues, MyFormProps>({
  form: 'loginForm' // 表单唯一标识,必填
})(LoginForm);

2. 在容器组件中传递isLoading props

接下来要确保容器组件把isLoading从Redux state中取出来,传递给表单组件:

import { connect } from 'react-redux';
import LoginForm from './LoginForm';

// 假设你的Redux state结构里,isLoading在auth模块下
const mapStateToProps = (state: RootState) => ({
  isLoading: state.auth.loginLoading // 根据你的实际state路径调整
});

// 把isLoading映射为表单组件的props
export default connect(mapStateToProps)(LoginForm);

这里要注意RootState是你项目中全局Redux state的类型定义,确保它和你的state结构匹配。

3. 验证类型正确性

做完上面两步,TypeScript就会识别到isLoading是表单组件的合法props,不会再抛出类型错误了。核心是通过InjectedFormProps<FormFieldValues> & { isLoading: boolean }这个类型组合,告诉TypeScript:我的表单组件既要接收Redux Form注入的表单props,也要接收自定义的isLoading。

内容的提问来源于stack exchange,提问作者Mukund Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 04:10:32