我不想在类中编写组件,而是使用函数语法。
如何覆盖 componentDidMount
, componentWillMount
内部功能组件?
甚至可能吗?
const grid = (props) => {
console.log(props);
let {skuRules} = props;
const componentDidMount = () => {
if(!props.fetched) {
props.fetchRules();
}
console.log('mount it!');
};
return(
<Content title="Promotions" breadcrumbs={breadcrumbs} fetched={skuRules.fetched}>
<Box title="Sku Promotion">
<ActionButtons buttons={actionButtons} />
<SkuRuleGrid
data={skuRules.payload}
fetch={props.fetchSkuRules}
/>
</Box>
</Content>
)
}
原文由 Aftab Naveed 发布,翻译遵循 CC BY-SA 4.0 许可协议
编辑: 随着
Hooks
的引入,可以实现生命周期类型的行为以及功能组件中的状态。目前useEffect
钩子可用于复制生命周期行为,而useState
可用于将状态存储在功能组件中。基本语法:
您可以在钩子中实现您的用例,例如
useEffect
还可以返回一个函数,该函数将在组件卸载时运行。这可用于取消订阅侦听器,复制componentWillUnmount
的行为:例如:componentWillUnmount
要使
useEffect
以特定事件为条件,您可以为其提供一组值以检查更改:例如:componentDidUpdate
挂钩等效
如果包含此数组,请确保包含组件范围内随时间变化的所有值(道具、状态),否则您最终可能会引用先前渲染中的值。
使用
useEffect
有一些微妙之处;查看 APIHere
。v16.7.0之前
函数组件的属性是它们无法访问 Reacts 生命周期函数或
this
关键字。如果要使用生命周期功能,则需要扩展React.Component
类。当您只想渲染组件而不需要额外的逻辑时,函数组件很有用。