用 flex 布局和 React Hooks 实现一个思维导图

栏目: 服务器 · 发布时间: 2个月前

来源: juejin.im

本文转载自:https://juejin.im/post/5cdbb6b2f265da03761eaeef,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有。

学习 React 时做的练手项目,基于纯 Hooks 和 flex 布局实现的思维导图。

项目地址: RMind ,喜欢的话还请点个 star,谢谢啦~ :wink:

在线演示:RMind Demo

介绍

Hooks

所有组件都是函数组件,由 Hook 实现事件、状态等的管理。除了 useStateuseEffect 等基本操作外,还实现了:

  • 利用 useReduceruseContext 的结合,代替 Redux 进行全局状态管理。
  • 将一些重复的 Hook 操作,合并为自定义 Hook 以复用。

flex

项目中第一个实现的功能是思维导图的绘制,当时图省事没有使用 canvas 或 SVG,而是将导图节点作为 DOM,用 CSS flex 布局。

后来发现这样算是给自己挖了个坑,绘制节点连接线时还是绕不开 canvas,而且因为要获取节点 DOM 的 offset 参数,反而显得有些繁琐。

不过正因为节点是 DOM,调用 DOM 的 api,很轻易就实现了拖拽功能。最初构想时以为这会是项目里的难点。

数据结构

思维导图数据结构使用多叉树实现,通过 DFS 进行文件的读写和节点查找。

后来想过用平级结构存储,渲染时根据每个节点保存的子节点 ID 信息,实时构建一棵树出来,可能效率还高一点,不过因为懒就没再深入研究。

不足

一开始想的是做个基本的增删改就行,做着做着快捷键加上了…主题加上了…撤销重做加上了。 context 越写越大,带来了一些组件的重复渲染问题。不过本地测试时还挺流畅,就先搁置不解决了:stuck_out_tongue_closed_eyes:

本人经验能力有限,写的代码可能不够美观,可能藏了很多 bug(虽然自己已经抓出来了很多…)。希望各位高手能不吝赐教~

话不多说,下面放上项目简介

RMind

基于 React Hooks 与 flex 布局,实现了大部分功能的思维导图。

特点

  • 完全使用 React Hooks 开发,所有功能均由箭头函数实现
  • 用 flex 布局完成思维导图排版,唯一用到 canvas 的地方是绘制节点连接线

支持

  • 节点的增删改等基本功能
  • 拖拽操作
  • 撤销/重做
  • 导入及导出 .km(百度脑图) .md(Makrdown) .txt 格式的思维导图
  • 将导图保存为图片
  • 切换主题

演示

  • 拖拽操作
用 flex 布局和 React Hooks 实现一个思维导图
  • 键盘操作
用 flex 布局和 React Hooks 实现一个思维导图
  • 切换主题
用 flex 布局和 React Hooks 实现一个思维导图

操作方式

鼠标操作

  • 单击选中节点
  • 双击编辑节点文字
  • 拖拽移动节点

键盘操作

功能 按键
切换所选节点 / / /
添加子节点 Tab
添加兄弟节点 Enter
删除节点 Backspace / Delete
修改节点文字 F2
切换显示子节点 Space
撤销 Cmd/Ctrl + Z
重做 Cmd/Ctrl + Shift + Z

编辑文字状态下:

功能 按键
取消 Esc
确认 Enter

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

为你推荐:

相关软件推荐:

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Orange'S:一个操作系统的实现

Orange'S:一个操作系统的实现

于渊 / 电子工业出版社 / 2009-6 / 69.00元

《Orange S:一个操作系统的实现》从只有二十行的引导扇区代码出发,一步一步地向读者呈现一个操作系统框架的完成过程。书中不仅关注代码本身,同时关注完成这些代码的思路和过程。本书不同于其他的理论型书籍,而是提供给读者一个动手实践的路线图。读者可以根据路线图逐步完成各部分的功能,从而避免了一开始就面对整个操作系统数万行代码时的迷茫和挫败感。书中讲解了大量在开发操作系统中需注意的细节问题,这些细节不......一起来看看 《Orange'S:一个操作系统的实现》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具