Midway Hooks 使用了类似于 React Hooks 的语法,允许开发者通过 Function + Hooks 的方式,获取当前请求数据并提供 Web 服务。

在下面的例子中,我们通过 useContext 获取请求上下文,并返回当前请求的 HTTP Method。

  1. import { useContext } from '@midwayjs/hooks'
  2. export function getHttpMethod () {
  3. const { request } = useContext()
  4. return request.method
  5. }

什么是 Hooks

Hooks 是一些可以让你在函数里访问当前请求上下文信息的函数。

我们提供了内置的 Hooks:

  • useContext: 获取请求上下文
  • useLogger: 获取 Logger
  • useInject: 获取 IoC 注入的实例
  • useConfig: 获取用户配置
  • usePlugin: 获取 Egg 插件

你也可以创建自己的 Hooks 来复用代码逻辑。

与 React Hooks 的区别

在 Midway Hooks 中,Hooks 是用于访问请求上下文信息的函数。因此 Hooks 只是用于访问信息,而不能保存状态或执行副作用等。

自定义 Hooks

我们可以通过自定义 Hooks 来对复杂逻辑进行封装与复用。

在定义与封装 Hooks 时,我们要求遵守统一的 Hooks 命名规范,以 use 作为自定义 Hooks 的命名前缀,如 useHeader, usePath 等。

定义 Hooks(apis/hooks/request.ts)

  1. import { useContext } from '@midwayjs/hooks'
  2. export function useHeader () {
  3. const { request } = useContext()
  4. return request.headers
  5. }
  6. export function usePath () {
  7. const { request } = useContext()
  8. return request.path
  9. }

调用自定义 Hooks(apis/function/index.ts)

  1. import { useHeader, usePath } from '../hooks/request'
  2. export function get () {
  3. return {
  4. header: useHeader(),
  5. path: usePath()
  6. }
  7. }