【发布时间】:2019-03-19 01:25:24
【问题描述】:
假设我有这样的课程:
class PeopleByTag extends React.Component<RouteComponentProps<{ tag: string }>
我需要在我的构造函数中做一些事情,在这个例子中获取数据,但是我需要声明一个 props 参数,但是如果我不指定类型,它将变成任何:
constructor(props) {
super(props); // props is any
this.loadData();
}
另一方面,如果我重新声明类型,代码会变得非常难看:
constructor(props: Readonly<{
children?: React.ReactNode;
}> & Readonly<RouteComponentProps<{
tag: string;
}, StaticContext, any>>) {
super(props);
this.loadData();
}
有没有办法从类扩展中自动推断 props 类型,同时还可以编写构造函数?
我也不想使用已弃用的生命周期挂钩(即 ComponentWillMount)。
【问题讨论】:
-
不推荐使用
componentDidMount生命周期方法获取数据吗? -
另外,从构造函数中调用方法通常不是最佳实践,因为类的子类可以覆盖方法,但在调用方法之前没有机会进行初始化。
-
@T.J.Crowder 视情况而定。不一定是特定于方法的问题,因为原型方法可以被孩子覆盖。此外,根据我的经验,在 React 中类继承的使用非常有限。
-
@estus - 是的,在 React 组件中,通常最好使用聚合或包含(React 开发人员当然是这么认为的)。但一般而言,养成这种习惯并不是一个好习惯。
标签: reactjs typescript