思路
- 获取原组件的
componentDidMount
方法:高阶组件接收原组件作为参数,在高阶组件内部可以访问原组件的生命周期方法。
- 创建新的
componentDidMount
方法:在新方法中,先执行自定义的前置逻辑,然后调用原组件的componentDidMount
方法,最后执行自定义的后置逻辑。
- 将新的
componentDidMount
方法赋值给被包裹组件:通过这种方式,既保留了原组件componentDidMount
的逻辑,又添加了自定义逻辑。
示例代码
import React from 'react';
// 高阶组件
function withCustomLogic(WrappedComponent) {
return class extends React.Component {
componentDidMount() {
// 前置自定义逻辑
console.log('自定义前置逻辑');
// 调用原组件的componentDidMount方法
if (typeof WrappedComponent.prototype.componentDidMount === 'function') {
WrappedComponent.prototype.componentDidMount.call(this);
}
// 后置自定义逻辑
console.log('自定义后置逻辑');
}
render() {
return <WrappedComponent {...this.props} />;
}
};
}
// 被包裹组件
class MyComponent extends React.Component {
componentDidMount() {
console.log('MyComponent的componentDidMount');
}
render() {
return <div>这是MyComponent</div>;
}
}
// 使用高阶组件包裹原组件
const EnhancedComponent = withCustomLogic(MyComponent);
export default function App() {
return (
<div>
<EnhancedComponent />
</div>
);
}