@devvie/bottom-sheet

中文文档
0.5.0发布于 2026/07/05MITTypeScriptESM + CJS零依赖近 30 天下载 5.9万

聪明的,小的,和软的底板 你应用的渴望

中文使用文档
文档目录17 节
  1. * 安装
  2. 为什么这个底盘?
  3. 基本实例
  4. ưμ㼯A
  5. ++ Propals 软件
  6. 反证方法
  7. 实例
  8. 1:QQ 对键盘弹出和方向变化(默认行为)的智能响应
  9. 2+Q 处理深层嵌入列表并滚动视图交互( 默认行为)
  10. 3️⃣ 当自动调整布局 height 财务报告和审定财务报表 containerHeight 道具更改( 默认行为)
  11. 4️⃣ 滚动内容时延长工作表高度
  12. 5- 用作 SnackBar
  13. 6️⃣自定义拖放动画内插
  14. 7-% 自定义相间/ 背面
  15. 捐款
  16. 许可证
  17. 支助

反应原生底表 {}

GitHub GitHub Workflow Status (with event) runs with expo GitHub code size in bytes npm bundle size (scoped) npm downloads

聪明的,微小的,灵活的底板 你的应用渴望


👉🏾 Buy Me A Coffee 👈🏾


Android & iOS 预览

Preview for Android & iOS

网络预览

Preview for Web

* 安装

npm install @devvie/bottom-sheet
# or
yarn add @devvie/bottom-sheet

为什么这个底盘?

🚀 插入和播放 —— 说 npm install 说完了 零第三方依赖性,没有 Babel 插件,没有 pock 安装. 完全建立在React Industrial自己的API上.

⌨️ 键盘智能 ——工作表自动检测键盘模式(adjustPan 编号 : adjustResize),测量自己在屏幕上的活性位置,当文字输入被聚焦时动画会达到安全高度——都没有任何配置或包装组件.

📦 小脚印 - ~ 4 KB 轻而易举。 极轻又快 几乎不会影响你的体型.

🎯 坐标点 - 确定休养职位,并配有: % 财务报告和审定财务报表 px 数值。 坐标点在内部按上升顺序自动排序,指索引 0 总是代表最小/相撞位置。 床单在释放时会快速到达最接近的点 并暴露出 snapToIndex, (中文(简体) ), expand,以及 collapse 用于全面方案控制.

📟 实时道具更新 ——动态变化 height, (中文(简体) ), snapPoints,或 containerHeight 随时,工作表会重新同步它的布局, 夹住它的活性索引, 并自动点火回调.

🌐 真正的跨平台 ——iOS,Android,Web,和博览会,均出自纯回放原生种. 不需要本地模块 .

🎞 3个动画类型 选择 slide, (中文(简体) ), spring,以及 fade 退出,或提供自定义的放松功能。 动画持续时间对于开放和相近的过渡都是完全可以配置的.

📜 嵌入式滚动 - 与 FlatList, (中文(简体) ), SectionList,以及 ScrollView 在床单内。 拖动手柄来移动工作表; 滚动列表来滚动其内容——没有手势冲突.

🎨 自定义组件 ——用您自己的动画组件来交换拖动手柄或背景. 两者都得到工作表的动画高度值来进行插值,因此可以构建丰富的交互手柄和相接相.

✨ 模式和非模式 · 使用有背景罩的全模式,或使用有高光阴影的轻量级内衬布。 支持工作表上方或后方的自定义背景组件.

✅ 类型脚本第一 ——有编译时间安全的全打入道具. height 财务报告和审定财务报表 snapPoints 在类型层面作为相互排斥的形式加以执行.

基本实例

必须打开和关闭底页。 通过 a ref 到底页并调用 open() 或者说 close() 方法。 。 .

1. 单高(默认)

import React, { useRef } from 'react';
import BottomSheet, { BottomSheetMethods } from '@devvie/bottom-sheet';
import { Button, Text, View } from 'react-native';

const App = () => {
  const sheetRef = useRef<BottomSheetMethods>(null);
  return (
    <View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
      <Button title="Open Sheet" onPress={() => sheetRef.current?.open()} />
      <BottomSheet ref={sheetRef} height={300}>
        <Text>
          The smart 😎, tiny 📦, and flexible 🎗 bottom sheet your app craves 🚀
        </Text>
      </BottomSheet>
    </View>
  );
};

export default App;

2. 有坐标点(多高)

import React, { useRef } from 'react';
import BottomSheet, { BottomSheetMethods } from '@devvie/bottom-sheet';
import { Button, Text, View } from 'react-native';

const App = () => {
  const sheetRef = useRef<BottomSheetMethods>(null);
  return (
    <View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
      <Button title="Open Sheet" onPress={() => sheetRef.current?.open()} />
      <BottomSheet
        ref={sheetRef}
        snapPoints={['30%', 450, '90%']}
        index={0}
        onSnap={(index) => console.log('snapped to', index)} // index 0..2, or -1 on close
      >
        <Text>Drag me between snap points 🎯</Text>
      </BottomSheet>
    </View>
  );
};

export default App;

ưμ㼯A

底板组件在内部使用并处理平板手势,以避免卷轴/平板上与其容器的不当行为, 别 放在一个支持平板的容器内,例如 ScrollView你可以把它放在旁边 ScrollView 和使用情况 React Fragment 或一个 View 把它包起来 一切都会好的.

不要这样

<ScrollView>
  <BottomSheet>...</BottomSheet>
</ScrollView>

~ 做到这一点 ~

<>
  <ScrollView>...</ScrollView>

  <BottomSheet>...</BottomSheet>
</>

++ Propals 软件

底板通过道具高度可配置. 所有道具都为两者服务 Android 财务报告和审定财务报表 iOS 除前缀外 android_ 财务报告和审定财务报表 ios_,仅用于 Android 财务报告和审定财务报表 iOS 页:1.

财产类型默认说明需求
android_backdropMaskRippleColorstring | OpaqueColorValue按下背景遮罩时的波纹效果颜色( R)只有机器人) (中文(简体) ).没有
android_closeOnBackPressbooleantrue确定设备后按键时工作表是否关闭( Q)只有机器人) (中文(简体) ).没有
animationType'slide' | 'spring' | 'fade' | ANIMATIONS'slide'打开和关闭底页时使用的动画 .没有
backdropMaskColorstring | OpaqueColorValue'#00000052'浅色或背景面具的颜色 .没有
childrenViewProps['children'] | React.FunctionComponent<{_animatedHeight: Animated.Value}>null底层工作表的内容.对
closeDurationnumber500工作表关闭动画的持续时间 .没有
closeOnBackdropPressbooleantrue确定下方工作表在按下缩放或背景掩码时是否关闭 .没有
closeOnDragDownbooleantrue确定底页是否在被拖下时关闭 .没有
containerHeightViewStyle['height']DEVICE SCREEN HEIGHT底板整体容器高度.没有
customBackdropComponentReact.FunctionComponent<{_animatedHeight: Animated.Value}>null自定义工作表的缩写或背景遮罩的组件 .没有
customBackdropPosition"top" | "behind"'behind'确定自定义 scrim或背景组件的位置. 'behind' 把它放在键盘后面,“上”把它放在键盘上.没有
customDragHandleComponentReact.FC<{_animatedHeight: Animated.Value}>自定义拖动手柄组件来替换默认底页拖动手柄 .没有
customEasingFunctionAnimationEasingFunctionANIMATIONS.SLIDE驾驶表动画的自定义放松功能.没有
disableBodyPanningbooleanfalse防止底盘被拖下/被拉下.没有
disableDragHandlePanningbooleanfalse拖动拖动拖动柄,防止底盘被压倒.没有
dragHandleStyleViewStyle用于拖动控点的额外样式 .没有
heightnumber | string'50%'打开底盘时的高度 。 相对 containerHeight 道具没有
hideDragHandlebooleanfalse当真实时, 隐藏工作表的拖动手柄 .没有
indexnumber0坐标点索引工作表打开到(当 snapPoints 已设定). 0 是最小的一点。 仅是初始位置(不是被动状态).没有
modalbooleantrue确定工作表是否为模式。 模式表有斜线或背景口罩,而标准(非模式)表则没有.没有
onSnap(index: number) => void当工作表在坐标点(道克或程序)上结算时调用; -1 关闭.没有
openDurationnumber500工作表打开动画的持续时间 .没有
snapPoints(number | string)[]undefined休息位置,px数字和 '%' 例如,字符串. ['30%', 600]优先排序 height。通过拖放或反射方法进行对齐.没有
styleOmit<ViewStyle, 'height' | 'minHeight' | 'maxHeight' | 'transform:[{translateY}]'>对底工作表应用的额外样式.没有

反证方法

床单 ref 揭露下列方法:

方法说明
open()打开底页( 到 index 道具,如果 snapPoints 提供,否则 height) (中文(简体) ).
close()关闭底盘 .
snapToIndex(index)动画到坐标点 index (尖叫声). -1 关闭; 如果工作表关闭则打开.
expand()动到最大起落点.
collapse()动到最小点.
sheetRef.current?.open(); // open sheet
sheetRef.current?.close(); // close sheet
sheetRef.current?.snapToIndex(2); // jump to the 3rd (largest) point
sheetRef.current?.expand(); // largest point
sheetRef.current?.collapse(); // smallest point

何时 snapPoints 这些方法不能解决单一的 height所以他们总是安全的打电话.

实例

灵活性是这个底层工作表的重点,这些少数例子显示了底层工作表的某些行为,以及调整道具可以实现什么.

1:QQ 对键盘弹出和方向变化(默认行为)的智能响应

机器人iOS系统
Preview for keyboard handling (Android)Preview for keyboard handling (iOS)

2+Q 处理深层嵌入列表并滚动视图交互( 默认行为)

机器人iOS系统
Preview for scroll handling (Android)Preview for scroll handling (iOS)

3️⃣ 当自动调整布局 height 财务报告和审定财务报表 containerHeight 道具更改( 默认行为)

4️⃣ 滚动内容时延长工作表高度

5- 用作 SnackBar

6️⃣自定义拖放动画内插

7-% 自定义相间/ 背面

很快会有更多例子出现...

捐款

见 贡献指南 学习如何为储存库和发展工作流程作出贡献.

许可证

麻省理工学院

见 自由主义


支助

</> 与 {} 由 德维 ✌

版本与发布记录

@devvie/bottom-sheet 共发布 11 个版本,首次发布于 2023/10/10;过去 12 个月发布了 2 个版本。

版本发布日期距今
0.5.0latest2026/07/054 个月前
0.4.42026/05/185 个月前
0.4.32024/10/302 年前
0.4.22024/09/142 年前
0.4.12024/09/142 年前
0.4.02024/09/132 年前

关于 @devvie/bottom-sheet 的常见问题

@devvie/bottom-sheet 是什么?

聪明的,小的,和软的底板 你应用的渴望

如何安装 @devvie/bottom-sheet?

在项目目录运行 npm install @devvie/bottom-sheet,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:react(>=18.2.0)、react-native(>=0.73.4)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@devvie/bottom-sheet 支持 TypeScript 吗?

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

@devvie/bottom-sheet 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@devvie/bottom-sheet 可以商用吗?

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

@devvie/bottom-sheet 的下载量有多少?

根据 npm 官方下载统计,@devvie/bottom-sheet 在 2026/10/12 – 2026/11/10 这 30 天内被下载 59,003 次,日均约 1,967 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@devvie/bottom-sheet 还在维护吗?

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