reactjs – 如何在没有构造函数的情况下使用Typescript在React中
在现代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中直接被认为是一种不好的做法/风格? 解决方法
是.
没有. 一个稍好的方法 考虑将状态声明为公共只读,并使用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规则. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |