尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
react-kanban 受控还是非受控?10 分钟搞懂看板两种状态管理模式
react-kanban 受控还是非受控?10 分钟搞懂看板两种状态管理模式【免费下载链接】react-kanbanYet another Kanban/Trello board lib for React.项目地址: https://gitcode.com/gh_mirrors/reac/react-kanbanreact-kanban 是 React 生态中一个轻量、好用的看板Kanban/Trello组件库支持拖拽卡片、拖拽列表、增删改列等完整功能。很多新手在第一次使用时都会卡在一个问题上react-kanban 受控还是非受控到底该怎么选其实两种模式都支持关键看你的数据状态由谁来管理。本文用 10 分钟带你彻底搞懂 react-kanban 的受控组件与非受控组件两种状态管理模式以及各自的适用场景。为什么 react-kanban 有两种状态管理模式React 表单领域有一个经典概念受控组件Controlled与非受控组件Uncontrolled。react-kanban 把这个思路用在了看板组件上让你可以根据项目复杂度自由选择数据管理方式。核心判断逻辑就藏在 Board/index.js 这一行代码里function Board(props) { return props.initialBoard ? UncontrolledBoard {...props} / : ControlledBoard {...props} / }也就是说传了initialBoard就是非受控模式没传就是受控模式就这么简单。非受控模式开箱即用的最快配置方法非受控模式是最省心的入门方式适合原型开发、内部工具、演示页面等场景。一键使用步骤安装依赖yarn add asseinfo/react-kanban定义你的看板数据列和卡片通过initialBoardprop 传入直接渲染import Board from asseinfo/react-kanban const board { columns: [ { id: 1, title: 待办, cards: [{ id: 1, title: 写文章, description: 完成 react-kanban 教程 }] }, { id: 2, title: 进行中, cards: [{ id: 2, title: 搭项目, description: 初始化脚手架 }] }, ], } Board initialBoard{board} /非受控模式的工作原理在非受控模式下组件内部通过useState自己持有看板状态拖拽、增删卡片等操作都由组件内部自动完成你无需关心数据如何变化。可以看 Board/index.js 中的实现const [board, setBoard] useState(initialBoard)所有操作拖拽移动、删除列、新增卡片结束后组件都会更新自己的内部状态并通过onCardDragEnd、onColumnRemove等回调通知你发生了什么。内部帮你干活回调告诉你结果这就是非受控模式的精髓。非受控模式的注意事项想拿到最新数据需要依赖回调参数如onCardDragEnd(board, card, source, destination)新增列/卡片时必须通过onNewColumnConfirm、onNewCardConfirm回调返回带唯一 id 的新数据适合不需要持久化、不与其他组件共享状态的场景受控模式把数据牢牢握在自己手里当你的看板数据需要与后端同步、与 Redux/Zustand 等状态库联动、或者多个组件共享同一份数据时受控模式才是正确选择。受控模式的使用步骤用useState在自己组件里维护看板数据通过children而不是initialBoard把数据传给Board拖拽结束后在回调里用官方 helper 更新自己的状态import Board, { moveCard } from asseinfo/react-kanban import { useState } from react function App() { const [board, setBoard] useState(initialBoard) function handleCardDrag({ source, destination }) { if (!destination) return // 用官方 helper 生成新看板再写回 state setBoard(moveCard(board, source, destination)) } return Board onCardDragEnd{handleCardDrag}{board}/Board }受控模式的工作原理受控模式下Board组件只负责渲染不保存任何状态。数据流是单向的你的 state → 组件渲染 → 用户操作 → 回调给你 → 你更新 state → 重新渲染。整个状态管理闭环完全由你掌控。官方在 README.md 中明确说明受控模式需要你自己处理看板状态组件只是反射你的状态。受控模式的常用 helper 函数受控模式最怕自己手写数据变换逻辑好消息是官方提供了一整套纯函数 helper全部在 src/services/helpers.js 中100% 单元测试覆盖不产生任何副作用Helper作用moveCard(board, source, destination)移动卡片moveColumn(board, source, destination)移动列addCard(board, column, card, {on})新增卡片可指定顶部/底部removeCard(board, column, card)删除卡片addColumn(board, column)新增列removeColumn(board, column)删除列changeColumn(board, column, newData)修改列属性如重命名changeCard(board, cardId, newData)修改卡片属性用法统一传入 board 和操作参数返回一个新 board你只需要setBoard(newBoard)即可。受控 vs 非受控一张表帮你快速决策对比维度非受控模式受控模式传入方式initialBoardchildren状态归属组件内部useState你自己的 state上手难度⭐ 简单开箱即用⭐⭐⭐ 需要自己管理数据数据持久化需要从回调中取最新数据天然适合state 即真相状态共享较困难轻松与全局状态库联动适合场景原型、演示、简单内部工具生产环境、复杂业务、后端同步生产环境的最佳实践建议如果你是初学者先用非受控模式跑通 demo感受拖拽交互正式开发时再切换到受控模式配合 helper 函数管理数据。这里给出三条实战建议始终把 helper 当作唯一的数据变更入口避免手写数组变换减少 bug在onCardDragEnd里先判断destination是否为空拖拽到看板外时destination为null此时不应更新数据官方测试用例也验证了这一点见 Board/index.spec.js记住两种模式的回调参数差异非受控模式的onCardDragEnd回调第一个参数是更新后的完整 board受控模式的回调第一个参数是移动的卡片对象具体差异可查阅官方文档 README.md总结react-kanban 受控还是非受控本质是**谁拥有数据状态**的选择题想要省心、快速出效果就选非受控想要可控、可持久化就选受控。10 分钟已经过去相信你现在已经能根据项目需求做出正确的决定了。快去你的 React 项目里试一试吧【免费下载链接】react-kanbanYet another Kanban/Trello board lib for React.项目地址: https://gitcode.com/gh_mirrors/reac/react-kanban创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

无审查模型的安全边界在哪里?Qwen3.8-27B-Heretic-Abliterated-Uncensored-GGUF责任使用与合规指南

无审查模型的安全边界在哪里?Qwen3.8-27B-Heretic-Abliterated-Uncensored-GGUF责任使用与合规指南

无审查模型的安全边界在哪里?Qwen3.8-27B-Heretic-Abliterated-Uncensored-GGUF责任使用与合规指南 【免费下载链接】Qwen3.8-27B-Heretic-Abliterated-Uncensored-GGUF 项目地址: https://ai.gitcode.com/hf_mirrors/0bserverx/Qwen3.8-27B-Heretic-Abliterated…

📅 2026/10/7 19:00:36
Rusted PackFile Manager 终极指南:一站式《全面战争》模组开发工具的完整解析

Rusted PackFile Manager 终极指南:一站式《全面战争》模组开发工具的完整解析

Rusted PackFile Manager 终极指南:一站式《全面战争》模组开发工具的完整解析 【免费下载链接】rpfm Rusted PackFile Manager (RPFM) is a... reimplementation in Rust and Qt6 of PackFile Manager (PFM), one of the best modding tools for Total War Games. …

📅 2026/8/25 10:40:15
103、车载摄像头自检机制——冻结帧/黑帧/模糊帧的实时检测算法与芯片实现

103、车载摄像头自检机制——冻结帧/黑帧/模糊帧的实时检测算法与芯片实现

103、车载摄像头自检机制——冻结帧/黑帧/模糊帧的实时检测算法与芯片实现 去年在某个量产项目上,客户反馈说倒车影像偶尔会卡住不动,但又不是每次都复现。我们抓了三天log,最后发现是ISP的3A统计模块在低照度场景下把曝光时间拉到了极限,帧率掉到了个位数,但V4L2的buffe…

📅 2026/8/26 2:01:42
MORE NEWS

更多资讯

📰

超市管理系统.zip从解压到跑通:环境配置与核心改造

简介:这份毕业设计与课程设计两用的超市管理系统项目,面向计算机相关专业在校生、初入行的开发者及需要快速搭建完整演示系统的同学,可覆盖前端页面展示、后端业务逻辑与数据库配置等常见课设/毕设环节。压缩包共 2001 个文件、约 52.19MB&am…

📰

JDK 15.0.2.zip:解压即用的最小可信交付单元

简介:本资源为Oracle官方发布的Java开发工具包JDK 15.0.2完整安装包(zip格式),面向Java初学者、中级开发者及教学实践者,用于搭建标准Java开发与运行环境,支撑新特性学习、项目编译调试及JVM性能验证。压缩…

📰

七自由度车辆动力学模型:MATLAB+Dugoff轮胎的底盘控制标定实战

简介:本资源是一份面向车辆动力学建模与仿真初学者及进阶工程师的七自由度车辆模型实践资料,聚焦汽车控制算法开发、驾驶模拟器构建与底盘性能优化等实际场景。压缩包含2个核心文件:Simulink模型文件(seven_dugoff.mdl&#xff09…

📰

Python自动化办公实战:Excel、Word、PDF、PPT批量处理与避坑指南

简介:这份Python自动化办公教程面向希望提升日常办公效率的职场人士与编程初学者,以Python为工具解决表格处理、文档生成、邮件收发等重复性事务。教程从基础语法讲起,逐步覆盖Excel读写与图表制作、Word与PDF文档操作、PPT快速入门、邮件收发…

📰

EMD-KPCA-LSTM多维时间序列预测:非平稳光伏功率的MATLAB实现

简介:面向光伏功率预测与多变量时间序列建模需求,这份程序包提供完整的EMD-KPCA-LSTM组合模型实现。资源适合有一定深度学习基础、希望将信号分解与特征提取方法融入LSTM预测流程的研究者。包内共24个文件,以MATLAB源程序(.m&…

📰

3ds Max界面太难?十区拆解+新手必练操作,轻松入门动画与效果图

简介:全套3ds Max动画制作实例教程的完整课件PPT,面向三维动画初学者、高校师生及培训讲师,可帮助快速熟悉3ds Max 2019的操作界面与基本操作,为后续建模、材质、动画设计打下基础。资源为单个PPTX演示文稿,共1个文件&…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬