在与 TypeScript 的反应中使用状态

新手上路,请多包涵

我是 TypeScript 的新手。我在渲染方法内显示 this.state.something 或将其分配给函数内的变量时遇到问题。

看看最重要的一段代码:

 interface State {
    playOrPause?: string;
}

class Player extends React.Component {
    constructor() {
        super();

        this.state = {
            playOrPause: 'Play'
        };
    }

    render() {
        return(
            <div>
                <button
                    ref={playPause => this.playPause = playPause}
                    title={this.state.playOrPause} // in this line I get an error
                    >
                    Play
                </button>
           </div>
        );
    }
}

错误说: [ts] Property 'playOrPause' does not exist on type 'ReadOnly<{}>'.

我试图将 playOrPause 属性声明为一种字符串类型,但它不起作用。

我在这里缺少什么使它起作用?

原文由 Maciej S. 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 400
2 个回答

您需要声明您的组件正在使用 State 接口,它由 Typescript 的泛型使用。

 interface IProps {
}

interface IState {
  playOrPause?: string;
}

class Player extends React.Component<IProps, IState> {
  // ------------------------------------------^
  constructor(props: IProps) {
    super(props);

    this.state = {
      playOrPause: 'Play'
    };
  }

  render() {
    return(
      <div>
        <button
          ref={playPause => this.playPause = playPause}
          title={this.state.playOrPause} // in this line I get an error
        >
          Play
        </button>
      </div>
    );
  }
}

原文由 felixmosh 发布,翻译遵循 CC BY-SA 4.0 许可协议

如果有人想知道如何 在带有钩子的功能组件中实现它(而不是在类中)

 const [value, setValue] = useState<number>(0);

useState 是一个泛型函数,这意味着它可以接受类型参数。这个类型参数将告诉 TypeScript 哪些类型对于这个状态是可以接受的。

原文由 PedroMiotti 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题