Puck🚀🚀,React 拖拽功能的革命性突破
原文链接:https://dev.to/puckeditor/revolutionizing-drag-and-drop-in-react-introducing-puck-018-1a68
作者:PuckEditor
译者:倔强青铜三
前言
大家好,我是倔强青铜三。作为一名热情的软件工程师,我热衷于分享和传播IT技术,致力于通过我的知识和技能推动技术交流与创新。欢迎关注我,微信公众号:倔强青铜三。欢迎点赞、收藏、关注,一键三连!!!
Puck 0.18版本的发布,标志着React拖拽功能的一次重大飞跃。这一版本引入了全新的拖拽引擎,支持CSS Grid和Flexbox,极大地提升了灵活性和用户体验。无论是开发者还是设计师,都能从中受益。接下来,让我们深入了解Puck 0.18的主要功能和如何快速上手。
更新到最新版本
如果你是首次使用Puck,可以通过以下命令安装最新版本:
npm install @measured/puck --save
如果你已经在项目中使用了Puck,可以通过以下命令进行更新:
npm update @measured/puck
由于此次更新没有引入任何破坏性更改,你可以直接开始探索新功能,无需担心兼容性问题。
自由多维拖拽
Puck 0.18的拖拽引擎彻底改变了用户体验。此前,Puck的拖拽功能主要限制在垂直方向,虽然可以通过DropZone
API实现多列布局,但用户需要手动调整组件位置,且在调整列数时需要重新组织组件。现在,你可以自由地在画布上以任何方向拖拽React组件——无论是垂直、水平还是在响应式网格中,Puck都会提供即时的视觉反馈,展示组件放置后的布局效果。
设置也非常简单,你只需要在Puck的config
中将DropZone
设置为网格或弹性盒模型即可:
Grid: {
//... 字段配置
render: ({ columns }) => (
<DropZone
zone="my-grid"
style={{
display: "grid",
gridTemplateColumns: `repeat(${columns}, 1fr)`,
}}
/>
),
},
高级CSS布局
此前,所有Puck组件都被包裹在一个div
中,这使得组件无法作为其父DropZone
的直接子元素,这对于CSS网格或弹性盒模型布局来说是必要的。通过新的inline
参数,你可以完全移除Puck的包裹层,使子组件成为DropZone
的直接子元素。这使得flex-grow
或grid-column
等CSS规则能够按预期工作。
例如,如果你想创建一个卡片网格,允许用户通过grid-column
和grid-row
CSS规则自定义每个卡片的行数和列数,你可以这样配置组件:
Card: {
//... 字段配置
// 启用inline模式以移除默认的包裹div
inline: true,
render: ({ spanRow, spanCol, puck }) => {
return (
<div
style={{
border: "1px solid black",
gridColumn: `span ${spanCol}`,
gridRow: `span ${spanRow}`,
}}
// 将拖拽引用传递给新的可拖拽div
ref={puck.dragRef}
>
卡片内容
</div>
);
},
},
Grid: {
//... 字段配置
render: ({ columns, rows }) => (
<DropZone
zone="my-grid"
style={{
display: "grid",
gridTemplateColumns: `repeat(${columns}, 1fr)`,
gridTemplateRows: `repeat(${rows}, 1fr)`,
}}
/>
),
},
跨DropZone
容器拖拽
此次更新中最令人兴奋的功能之一是能够在不同的DropZone
容器之间拖拽组件。此前,你只能在共享同一父级的区域之间拖拽组件,这显然限制了灵活性。现在,无论是在兄弟区域之间移动组件,还是将其拖拽到嵌套的子级中,甚至从子级拖拽回父级,都变得轻而易举——无需额外设置。
动态DropZone
高度
DropZone
也进行了重大改进:它们现在会根据子元素的高度动态调整自身高度,并准确预览最终渲染效果。此外,你还可以为为空的DropZone
设置占位高度,从而定义它们在为空时的行为,让你完全控制编辑器的布局,并根据需要突出显示DropZone
。
例如,你可以在页面顶部显示一个较短的导航栏DropZone
,同时保持主内容DropZone
尽可能高。在0.18版本中,你可以通过以下配置实现:
root: {
render: () => (
<div>
<DropZone
zone="nav"
// 设置为空时的高度为80像素
minEmptyHeight={80}
style={{ maxHeight: 100 }}
/>
<DropZone
zone="main"
// 设置为空时的高度为500像素
minEmptyHeight={500}
/>
</div>
),
},
扩展组件抽屉为网格
默认情况下,Puck会将Drawer
(所有可拖拽组件的容器)渲染为侧边栏中的垂直列表。此前,你可以通过自定义界面来决定其位置,但无法将其显示为网格。由于旧的拖拽引擎限制,这在以前是不可能实现的。但随着0.18版本中引入的新引擎,这一限制已经消除。
探索0.18的更多功能
0.18版本中还有许多其他功能,无法在此一一介绍。以下是除了拖拽功能更新之外的其他亮点:
- 交互热键切换:在预览模式下,通过
cmd+i
(Windows上为ctrl+i
)热键轻松切换组件的交互性,方便测试交互组件而无需离开编辑器。 - 选择父级操作:直接从操作栏快速选择组件的父级,使导航嵌套组件更加顺畅。
- 移除
position: fixed
:从默认布局中移除了这一样式,使将Puck嵌入你的应用程序变得更加简单。 - 新的
<ActionBar.Label>
组件:使用新的<ActionBar.Label>
组件组织和分隔操作栏的部分,使其更直观。
更多详细信息,请查阅官方文档。
结语
Puck v0.18是社区共同努力的成果。此次更新不仅仅是向前迈出的一步,而是一次巨大的飞跃。我们非常期待看到你用Puck构建的作品!无论你是在React中尝试拖拽编辑器、打造完美像素级设计,祝你使用愉快!
最后感谢阅读!欢迎关注我,微信公众号:倔强青铜三
。欢迎点赞
、收藏
、关注
,一键三连!!!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。