面试题答案
一键面试基本原理
- 高阶组件本质:高阶组件(HOC)是 React 中用于复用组件逻辑的一种高级技巧。它本身是一个函数,接收一个组件作为参数,并返回一个新的组件。
- 权限控制原理:通过 HOC 对目标组件进行包裹,在返回的新组件中可以检查权限相关的信息(如从 Redux 存储、本地存储或通过 API 获取的权限数据)。根据权限检查结果,决定是渲染目标组件,还是渲染提示无权限的界面,从而实现对组件展示的权限控制。
关键概念
- props 传递
- 权限数据传递:权限相关的数据可以通过 props 传递给 HOC。例如,在父组件中获取到用户的权限列表
permissions
,然后通过<WithPermissionComponent permissions={permissions}>...</WithPermissionComponent>
这样的方式将权限数据传递给 HOC 所返回的新组件。 - 目标组件 props 透传:HOC 在返回新组件时,需要将接收到的除了用于权限控制的 props 之外的其他 props 透传给目标组件。这样目标组件的功能不会受到影响。例如:
const withPermission = (WrappedComponent) => { return (props) => { const { permissions, ...otherProps } = props; // 权限检查逻辑 return <WrappedComponent {...otherProps} />; }; };
- 权限数据传递:权限相关的数据可以通过 props 传递给 HOC。例如,在父组件中获取到用户的权限列表
- 组件包裹
- 包裹过程:HOC 接收目标组件作为参数,在函数内部返回一个新的组件,这个新组件会在其
render
方法中渲染目标组件。例如:
const withPermission = (WrappedComponent) => { return class extends React.Component { render() { // 权限检查 return <WrappedComponent {...this.props} />; } }; };
- 作用:通过这种包裹方式,HOC 可以在目标组件渲染前后添加额外的逻辑,如权限检查、日志记录等,而不需要修改目标组件的内部代码,实现了逻辑的复用和分离。
- 包裹过程:HOC 接收目标组件作为参数,在函数内部返回一个新的组件,这个新组件会在其