Reactjs 在构造函数中声明从不使用的React props的正确方法
通常,当我在Reactjs 在构造函数中声明从不使用的React props的正确方法,reactjs,typescript,constructor,Reactjs,Typescript,Constructor,通常,当我在构造函数中不使用道具时,我可以安全地将其保留为空白 constructor() { super() } 但是TypeScript需要您定义它。如果我不使用它,我一直在做这样的事情: constructor(_: never) { super(_) } 是否有一种正确和/或更正式的方式来声明您从未使用过的参数?为了清晰和正确的类型,我会将参数的常用名称命名为props。声称它是never类型是不准确的,因为never是没有值的类型,并且在运行时肯定会将值传递给构造函
构造函数中不使用道具时,我可以安全地将其保留为空白
constructor() {
super()
}
但是TypeScript需要您定义它。如果我不使用它,我一直在做这样的事情:
constructor(_: never) {
super(_)
}
是否有一种正确和/或更正式的方式来声明您从未使用过的参数?为了清晰和正确的类型,我会将参数的常用名称命名为props
。声称它是never
类型是不准确的,因为never
是没有值的类型,并且在运行时肯定会将值传递给构造函数;不幸的是,从不
不会根据TypeScript处理JSX元素的特定方式导致编译错误。函数参数以避免编译错误<代码>.
名称具有误导性,因为它不包含信息,如果包含更多信息,则会与其他属性名称冲突。由于属性用作super
参数,因此不需要下划线
never
在这里不是正确的类型,因为这意味着。它可能与父构造函数参数类型冲突
constructor(...args) {
super(...args);
// ...
}
在JavaScript中这是一种正确的方法,但在TypeScriptsuper
中,如果参数是必需的,则应显式指定参数。这样的显式构造函数可以省略,因为在默认情况下,当未指定构造函数时,会执行此操作
在React组件中很少需要显式构造函数。唯一有效的super
属性是props
。大多数初始化代码都指向组件生命周期挂钩(不推荐是唯一的例外),而实例属性可以在TypeScript中声明为类字段:
class SomeComponent extends React.Component {
state = {
foo: synchronousInitialization();
};
// isn't needed
/*
constructor(props) {
super(props);
}
*/
async componentDidMount() {
const bar = await asynchronousInitialization();
this.setState({ ...this.state, bar });
}
...
}