react 高阶函数基本使用

33 阅读1分钟

高阶组件

HOC:higerOrderComponent

是react中用于复用组件逻辑的一种高级技巧,他不是react API的一部分

他是一种基于react特性形成的设计模式

使用案例一:

// 路由守卫
import { getToken } from "@/utils"
import { Navigate } from "react-router-dom"
// 创建一个AuthRoute组件
function AuthRoute ({children}) {
  // 获取token
  const token = getToken()
  // 如果token存在,则渲染子组件
  if (token) {
    return <>{children}</>
  // 否则跳转到登录页面
  }else {
    return <Navigate to="/login" replace />
  }
}
​
// 导出AuthRoute组件
export default AuthRoute
const routes = createBrowserRouter([
  {
    path: '/',
    element: <AuthRoute><Layout /></AuthRoute>,
  },
  {
    path: '/login',
    element: <Login />,
  }
])

使用案例二:

const enhanceComponent = (Component) => {
  // 定义一个新的组件,名为 EnhancedComponent
  const EnhancedComponent = (props) => {
    // 组件的属性
    const newProps = {...props };
    // 这里可以添加或修改组件的属性
    newProps.title = ' Enhanced Component';

    // 调用原始组件,将新的属性传递给它
    return <Component {...newProps} />;
  };

  // 返回增强后的组件
  return EnhancedComponent;
};

// 使用增强后的组件
const MyComponent = (props) => {
  return <div>Hello, {props.name}</div>;
};

// 使用 enhanceComponent 函数增强 MyComponent 组件
const EnhancedMyComponent = enhanceComponent(MyComponent);

// 在 JSX 中使用增强后的组件
<EnhancedMyComponent name="John" />;

高阶组件可以用来做很多事情,例如:

  • 状态管理:可以使用高阶组件来管理状态,并将状态传递给子组件。
  • 路由:可以使用高阶组件来处理路由逻辑,并将路由信息传递给子组件。
  • 数据获取:可以使用高阶组件来获取数据,并将数据传递给子组件。
  • 样式:可以使用高阶组件来应用样式,并将样式传递给子组件。