ant-design/components/message/index.en-US.md
07akioni 01cec29a8e
feat: Message hooks API (#25422)
* chore: comment on usePatchElement

* refactor: conform message & notifaction code logic

* feat: message useMessage, wip

* feat: message.useMessage, it works now

* fix: promise on regular api

* feat: message hooks

* chore: fix lint

* chore: new line

* chore: revert new line

* refactor: prefixCls

* fix: prefixCls

* test: cov

* chore

* chore

* chore

* chore

* docs

* docs: message hooks faq

* test: remove useless config provider

* chore: remove some test codes

* chore

* docs: hooks version
2020-07-15 19:51:56 +08:00

4.2 KiB

category type noinstant title cover
Components Feedback true Message https://gw.alipayobjects.com/zos/alicdn/hAkKTIW0K/Message.svg

Display global messages as feedback in response to user operations.

When To Use

  • To provide feedback such as success, warning, error etc.
  • A message is displayed at top and center and will be dismissed automatically, as a non-interrupting light-weighted prompt.

API

This components provides some static methods, with usage and arguments as following:

  • message.success(content, [duration], onClose)
  • message.error(content, [duration], onClose)
  • message.info(content, [duration], onClose)
  • message.warning(content, [duration], onClose)
  • message.warn(content, [duration], onClose) // alias of warning
  • message.loading(content, [duration], onClose)
Argument Description Type Default
content The content of the message string | ReactNode | config -
duration Time(seconds) before auto-dismiss, don't dismiss if set to 0 number 1.5
onClose Specify a function that will be called when the message is closed function -

afterClose can be called in thenable interface:

  • message[level](content, [duration]).then(afterClose)
  • message[level](content, [duration], onClose).then(afterClose)

where level refers one static methods of message. The result of then method will be a Promise.

Supports passing parameters wrapped in an object:

  • message.open(config)
  • message.success(config)
  • message.error(config)
  • message.info(config)
  • message.warning(config)
  • message.warn(config) // alias of warning
  • message.loading(config)

The properties of config are as follows:

Property Description Type Default
content The content of the message ReactNode -
duration Time(seconds) before auto-dismiss, don't dismiss if set to 0 number 3
onClose Specify a function that will be called when the message is closed function -
icon Customized Icon ReactNode -
key The unique identifier of the Message string | number -
className Customized CSS class string -
style Customized inline style CSSProperties -

Global static methods

Methods for global configuration and destruction are also provided:

  • message.config(options)
  • message.destroy()

message.config

When you use ConfigProvider for global configuration, the system will automatically start RTL mode by default.(4.3.0+)

When you want to use it alone, you can start the RTL mode through the following settings.

message.config({
  top: 100,
  duration: 2,
  maxCount: 3,
  rtl: true,
  prefixCls: 'my-message',
});
Argument Description Type Default Version
duration Time before auto-dismiss, in seconds number 1.5
getContainer Return the mount node for Message () => HTMLElement () => document.body
maxCount Max message show, drop oldest if exceed limit number -
top Distance from top number 24
rtl Whether to enable RTL mode boolean false
prefixCls The prefix className of message node string ant-message 4.5.0

FAQ

Why I can not access context, redux in message?

antd will dynamic create React instance by ReactDOM.render when call message methods. Whose context is different with origin code located context.

When you need context info (like ConfigProvider context), you can use message.useMessage to get api instance and contextHolder node. And put it in your children:

const [api, contextHolder] = message.useMessage();

return (
  <Context1.Provider value="Ant">
    {/* contextHolder is inside Context1 which means api will get value of Context1 */}
    {contextHolder}
    <Context2.Provider value="Design">
      {/* contextHolder is outside Context2 which means api will **not** get value of Context2 */}
    </Context2.Provider>
  </Context1.Provider>
);

Note: You must insert contextHolder into your children with hooks. You can use origin method if you do not need context connection.