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

将React JSX应用转为TSX时遇state/setState不存在错误求助

解决React TSX中state/setState不存在的类型错误

嘿,我一眼就瞅出你代码里的问题啦!咱们一步步来搞定:

1. 最核心的错误:Component泛型参数顺序搞反了

React的Component类泛型定义是先Props,后State,也就是Component<PropsType, StateType>。你现在写成了Component<STATE, PROPS>,这直接让TypeScript搞混了类型——它把你的状态类型当成了组件props的类型,把props类型当成了状态类型,自然就找不到state和setState啦!

2. 状态接口和实际state不匹配

你定义的STATE接口只有loading: boolean,但constructor里给state加了fruitsData: [],这会触发类型不匹配警告,得把STATE接口补上这个字段。

3. Constructor的props类型别用any

你已经定义了PROPS接口,直接用它就行,别用any,不然TypeScript的类型检查就白做啦。

修正后的完整代码

import React, { Component } from 'react';

interface STATE { 
  loading: boolean;
  fruitsData: any[]; // 要是知道水果数据的具体类型,建议换成更精确的类型,比如Fruit[]
};
interface PROPS {};

// 注意泛型顺序:先PROPS,后STATE
export default class App extends Component<PROPS, STATE> {
  constructor(props: PROPS) {
    super(props);
    this.state = { 
      fruitsData : [], 
      loading: false 
    };
  }

  componentDidMount() {
    this.setState({ loading: true });
    // 后续的服务调用和数据绑定逻辑可以正常写啦
  }

  // 别忘了加render方法哦,不然组件没法渲染
  render() {
    return (
      <div>
        {this.state.loading ? <p>Loading...</p> : <p>Loaded!</p>}
      </div>
    );
  }
}

额外提醒:依赖版本不匹配

看你的package.json,react和react-dom是15.5.4版本,但@types/react和@types/react-dom是16.x版本,这可能会导致一些类型不兼容的问题。建议要么把react和react-dom升级到16.x版本(更推荐,15.x已经很老了),要么把@types/react和@types/react-dom降级到对应15.x的版本(比如@types/react@^15.6.0)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:18:53