<docs>
---
order: 10
title:
  zh-CN: Hooks 调用（推荐）
  en-US: Hooks Usage (Recommend)
---

## zh-CN

通过 `notification.useNotification` 创建支持读取 context 的 `contextHolder`。请注意，我们推荐通过顶层注册的方式代替 `message` 静态方法，因为静态方法无法消费上下文，因而 ConfigProvider 的数据也不会生效。

## en-US

Use `notification.useNotification` to get `contextHolder` with context accessible issue. Please note that, we recommend to use top level registration instead of `notification` static method, because static method cannot consume context, and ConfigProvider data will not work.

</docs>
<template>
  <a-space>
    <a-button type="primary" @click="() => open('topLeft')">
      <RadiusUpleftOutlined />
      topLeft
    </a-button>
    <a-button type="primary" @click="() => open('topRight')">
      <RadiusUprightOutlined />
      topRight
    </a-button>
  </a-space>
  <a-divider />
  <a-space>
    <a-button type="primary" @click="() => open('bottomLeft')">
      <RadiusBottomleftOutlined />
      bottomLeft
    </a-button>
    <a-button type="primary" @click="() => open('bottomRight')">
      <RadiusBottomrightOutlined />
      bottomRight
    </a-button>
  </a-space>
  <contextHolder />
</template>

<script lang="ts" setup>
import {
  RadiusBottomleftOutlined,
  RadiusBottomrightOutlined,
  RadiusUpleftOutlined,
  RadiusUprightOutlined,
} from '@ant-design/icons-vue';
import { NotificationPlacement, notification } from 'ant-design-vue';
const [api, contextHolder] = notification.useNotification();
const open = (placement: NotificationPlacement) => openNotification(placement);
const openNotification = (placement: NotificationPlacement) => {
  api.info({
    message: `Notification ${placement}`,
    description:
      'This is the content of the notification. This is the content of the notification. This is the content of the notification.',
    placement,
  });
};
</script>
