加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

reactjs – 如何在没有构造函数的情况下使用Typescript在React中

发布时间:2020-12-15 20:15:34 所属栏目:百科 来源:网络整理
导读:在现代JS中,我们可以直接为React组件设置一个初始状态,如下所示: class App extends React.Component { state = {value: 10} render() { return div{this.state.value}/div }} 当我尝试使用Typescript执行此操作时,TSLint说“类属性’状态’必须标记为’私
在现代JS中,我们可以直接为React组件设置一个初始状态,如下所示:

class App extends React.Component {
  state = {value: 10}

  render() {
    return <div>{this.state.value}</div>
  }
}

当我尝试使用Typescript执行此操作时,TSLint说“类属性’状态’必须标记为’私有’,’公共’或’受保护’”.如果我将其设置为“private”,则linter将报告Class’App’错误地扩展基类’Component< {},{value:number; },任何>‘.属性’state’在’App’类型中是私有的,但在’Component< {},任何>‘.在App上.我知道我可以调整linter规则以跳过这种检查,但是检查类属性的可见性通常是我想要利用的好事.

测试完所有三个选项后,只选择“public”不会导致TSLint抛出错误.但由于此处的状态代表了此特定组件的内部状态,因此将其设置为公共状态似乎很奇怪.我这样做是正确的吗?

class App extends React.Component<{},{ value: number }> {
  public state = { value: 10 };

  public render() {
    return <div>{this.state.value}</div>;
  }
}

在我在网上找到的所有TS-React教程中,都使用了一个构造函数,就像旧的JS语法一样.

class App extends React.Component<{},{ value: number }> {
  constructor(props: any) {
    super(props);
    this.state = { value: 10 };
  }

  public render() {
    return <div>{this.state.value}</div>;
  }
}

设置类属性在Typescript中直接被认为是一种不好的做法/风格?

解决方法

Am I doing it the correct way?

是.

Is setting class property directly considered a bad style in Typescript?

没有.

一个稍好的方法

考虑将状态声明为公共只读,并使用Readonly modifier.

这将满足TSLint,同时还为您提供一些防止被错误修改的保护(即不使用this.setState).
尽管国家仍然暴露在外,但这通常不是问题.

interface IState {
  value: number;
}

class App extends React.Component<{},IState> {
  public readonly state: Readonly<IState> = {
    value: 10
  }

  public render() {
    return <div>{this.state.value}</div>
  }
}

TSLint规则

明确声明访问修饰符是一件好事,即使它隐式地导致相同的访问.它有助于保持代码清晰,因此我不会禁用此TSLint规则.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读