@fluentui-react-native/use-slots

中文文档
0.13.7发布于 2026/11/12MITTypeScriptES Module近 30 天下载 3933

Hook 函数返回样式槽

中文使用文档
文档目录4 节
  1. 分阶段组件
  2. stagedComponent
  3. 已淘汰阶段组件
  4. 通过一个 useSlots 钩子

@fluentui-react-native/use-slots (英语)

以高效、可插接和可定制的方式将组件分层组合起来的模式和框架.

在构建组件库时,更大型更复杂的组件往往由更小更集中的组件来构建. 这在概念上是巨大的,因为它能够很好地区分各种关切,并能够进行更好和更模块化的设计。 此分层中的边界不仅由您组件的定义定义, 无论是函数还是基于类的组件, 而且由 React.createElement编辑 createElement 电话是JSX的合成糖 并且为钩子之类的东西提供分层.

问题是这种层层也增加了间接费用。 在构建HOC时,JSX树上元素的数量可以远远大于DOM中所渲染出的实际原始人的数量. 虽然可以通过直接调用来使一个函数组件,但如果该组件包含钩子,则必须谨慎行事. 钩子的存储实际上是一个从上一个索引的数组 createElement 电话 如果有的话 useState 电话会在一次传票上发出 但是在下一次被跳过 之后所有的钩子通话都会错位.

分阶段组件

要可靠地解决函数组件的这个问题,就必须将钩子呼叫与元素树生成区分开来. 这个软件包的图案是写出使函数返回一个会返回JSX树的续作函数. 这一模式如下:

const twoPartRender = (props: MyProps) => {
  // do the hook calls in this section */
  const theme = React.useContext(ThemeContext);
  const [state, setState] = React.useState(() => doSomeStateSetup()));

  // now return a (props) or (props, children) or (props, ...children) function that finishes the render
  return (additional: MyProps, ...children: React.ReactNode[]) => {
    const merged = { ...props, ...additional };
    return (<View {...merged}>{children}</View>)
  }
}

stagedComponent

这种类型的函数不能单独识别为一个组件. 此软件包导出一个帮助函数 stagedComponent 两者:

  • 将两个部分使函数变成可以识别的组件
  • 添加框架访问初始两个部分函数的手段, 如果它知道如何处理它

帮手会回来的 React.FunctionComponent 将道具(没有孩子)转发给第一个呼叫,然后将孩子传递给继续功能.

已淘汰阶段组件

分阶段组件可由人工消耗。 这看起来像是:

// create the BaseComponent as a staged component, this can still be rendered via <BaseComponent />
const BaseComponent = stagedComponent(/* some implementation */);

// create a wrapper component
const WrapperComponent = stagedComponent((props) => {
  // grab the children, do some prop transformations, etc.
  const { children, ...rest } = props;
  const propsForBase = doSomethingWithProps(rest);
  // call the first part of the function
  const continuation = BaseComponent._staged(propsForBase);
  // now render that component just by calling the function
  return continuation({}, children)
}

注意在此例子中 WrapperComponent 正在调用 BaseComponent 但不创建一个专用的树条。 同时 WrapperComponent 它本身可以作为分阶段的组成部分加以实施.

通过一个 useSlots 钩子

传统发展

版本与发布记录

@fluentui-react-native/use-slots 共发布 65 个版本,首次发布于 2020/07/29;过去 12 个月发布了 12 个版本。

版本发布日期距今
0.13.7latest2026/11/124 天前
0.13.62026/10/2918 天前
0.13.52026/09/241 个月前
0.13.42026/09/231 个月前
0.13.32026/09/022 个月前
0.13.22026/08/212 个月前

关于 @fluentui-react-native/use-slots 的常见问题

@fluentui-react-native/use-slots 是什么?

Hook 函数返回样式槽

如何安装 @fluentui-react-native/use-slots?

在项目目录运行 npm install @fluentui-react-native/use-slots,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:react(18.2.0 || 19.0.0 || 19.1.4)、react-native(^0.73.0 || ^0.74.0 || ^0.78.0 || ^0.81.6)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@fluentui-react-native/use-slots 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@fluentui-react-native/use-slots 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@fluentui-react-native/use-slots 可以商用吗?

@fluentui-react-native/use-slots 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@fluentui-react-native/use-slots 的下载量有多少?

根据 npm 官方下载统计,@fluentui-react-native/use-slots 在 2026/10/15 – 2026/11/13 这 30 天内被下载 3,933 次,日均约 131 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@fluentui-react-native/use-slots 还在维护吗?

最新版本 0.13.7 发布于 2026/11/12(4 天前);至今共发布 65 个版本,其中过去 12 个月发布了 12 个;首次发布于 2020/07/29。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。