packages/post-message/stories/demo-default/index.tsx (68 lines of code) (raw):

/* eslint-disable no-console */ import React, { useEffect } from 'react'; import { H1, Button } from '@alicloud/demo-rc-elements'; import { broadcast, subscribe, subscribeOnce, broadcastPromise, subscribePromise } from '../../src'; const TOPIC = { TEST: 'test', TEST_PROMISE: 'test:promise', TEST_PROMISE_ERROR: 'test:promise:error' }; function broadcastTest(): void { broadcast<number>(TOPIC.TEST, Date.now()); } function broadcastPromiseTest(): void { broadcastPromise<void, number>(TOPIC.TEST_PROMISE, Date.now()); } function broadcastPromiseTestError(): void { broadcastPromise(TOPIC.TEST_PROMISE_ERROR, undefined).then(() => { console.info('broadcastPromise return OK'); }, err => { console.info('broadcastPromise return failed', err); }); } export default function DemoDefault(): JSX.Element { useEffect(() => subscribe<number>(TOPIC.TEST, payload => { console.info('subscribe', payload); }), []); useEffect(() => subscribeOnce<number>(TOPIC.TEST, payload => { // 仅会触发一次 console.info('subscribeOnce', payload); }), []); useEffect(() => subscribePromise<void, number>(TOPIC.TEST_PROMISE, payload => { console.info('subscribePromise', payload); }), []); useEffect(() => subscribePromise<void, void>(TOPIC.TEST_PROMISE_ERROR, (): Promise<void> => { return new Promise((_resolve, reject) => { window.setTimeout(() => { const err = new Error('Something really stupid happened.'); err.name = 'SomethingStupid'; // eslint-disable-next-line @typescript-eslint/no-explicit-any (err as any).anyInfo = { hell: 'hell', hello: { toYou: 'too' } }; reject(err); }, 1200); }); }), []); return <> <H1>broadcast / subscribe / subscribeOnce</H1> <div> <Button onClick={broadcastTest}>broadcast</Button> </div> <H1>broadcastPromise / subscribePromise</H1> <div> <Button onClick={broadcastPromiseTest}>broadcastPromise</Button> <Button onClick={broadcastPromiseTestError}>broadcastPromise with Error</Button> </div> </>; }