Boundary 作用域
API 按 React 子树隔离,不必把所有能力都暴露成一个全局事件总线。
React 很擅长管理状态,但命令式组件协作经常会变得很别扭:
换一个角度看:
| 场景 | React 的方案 |
|---|---|
| 数据下传,单层 | props |
| 数据下传,跨层 | Context |
| 功能上传,单层 | useImperativeHandle |
| 功能上传,跨层 | 空白(react-api-bridge 来填补) |
react-api-bridge 把这类问题建模为“作用域命令式 API”,而不是“广播事件”。
你可以把它理解成:
refContext当你的真实需求是下面这些时,更适合用 react-api-bridge:
如果你的真实需求是下面这些,事件总线更合适:
import { useState } from 'react';
import {
createBoundary,
createBridge,
useAPI,
useRegister
} from '@ryo-98/react-api-bridge';
interface AppAPIs {
modal: {
open: (content: string) => void;
close: () => void;
};
}
const bridge = createBridge<AppAPIs>();
const Boundary = createBoundary(bridge);
function ModalHost() {
const [content, setContent] = useState<string | null>(null);
useRegister(bridge, 'modal', () => ({
open: setContent,
close: () => setContent(null)
}), []);
if (!content) return null;
return <dialog open>{content}</dialog>;
}
function OpenButton() {
const modalAPI = useAPI(bridge, 'modal');
return (
<button onClick={() => modalAPI.current?.open('Hello from anywhere')}>
打开弹窗
</button>
);
}
export default function App() {
return (
<Boundary>
<ModalHost />
<OpenButton />
</Boundary>
);
}继续阅读 快速开始。