@asseinfo/react-kanban

中文文档
2.2.0发布于 2021/09/23MITCommonJS近 30 天下载 1.8万

又一个Kanban/Trello board lib for React. 康班/特雷罗董事会发布反弹.

中文使用文档
文档目录15 节
  1. 德莫语
  2. 为什么?
  3. 🛠 安装和使用
  4. • API
  5. * 受管制和不受管制
  6. 棋盘形状
  7. ++ Propals 软件
  8. 用于控制板的助手
  9. {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF…
  10. 测试
  11. 单位
  12. 端对端
  13. * 路线图
  14. 捐款
  15. * 捐款准则

Maintainability Test Coverage Build Status JavaScript Style Guide

又一个Kanban/Trello board lib for React. 康班/特雷罗董事会发布反弹.

Kanban Demo

德莫语

使用量

Edit react-kanban-demo

为什么?

  • 可靠性:在CI上检测100%;覆盖率为100%;SemVer100%.
  • 和虎克一起玩游戏 样式组件。 。 。 .
  • QQ可访问:键盘和移动友好.
  • ++:用于项目.

🛠 安装和使用

由于这个项目使用Hooks,你必须安装它们:

  • react>=16.8.5

之后, 在您的工程上安装 lib :

yarn add @asseinfo/react-kanban

导入 lib 并将其用于您的工程 :

import Board from '@asseinfo/react-kanban'
import '@asseinfo/react-kanban/dist/styles.css'

const board = {
  columns: [
    {
      id: 1,
      title: 'Backlog',
      cards: [
        {
          id: 1,
          title: 'Add card',
          description: 'Add capability to add a card in a column'
        },
      ]
    },
    {
      id: 2,
      title: 'Doing',
      cards: [
        {
          id: 2,
          title: 'Drag-n-drop support',
          description: 'Move a card between the columns'
        },
      ]
    }
  ]
}

<Board initialBoard={board} />

• API

* 受管制和不受管制

当你需要更好的控制板时,你应该坚持控制板. 控制板意味着你需要 处理板自己, 你需要保持状态 在你的手中(组件) 并将状态传递给 <Board />我们只是反映这个状态. 这也意味着更复杂一点,尽管我们提供了一些帮助来应对棋盘形状. 你可以在React Docs中读取更多内容, 这里 财务报告和审定财务报表 这里。 。 。 .

如果你跟受控者走,你需要通过你的板子 children 道具,否则你需要通过它 initialBoard 道具 (英语).

协助控制板工作

我们揭露一些API 你可以导入 帮助你工作 在控制状态。 这些和我们内部用来管理无控制板的API相同. 我们真的建议你使用它们, 他们100%的单位测试, 他们不做任何副作用 你的董事会状态.

要使用它们,你只需要 导入它们与你的板:

import Board, { addCard, addColumn, ... } from '@asseinfo/react-kanban'

所有需要通过董事会的助手, 他们将返回一个新的董事会 传递到你的州:

import Board, { addColumn } from '@asseinfo/react-kanban'
...
const [board, setBoard] = useState(initialBoard)
...
const newBoard = addColumn(board, newColumn)
setBoard(newBoard)
...
<Board>{board}</Board>

可以在道具文档结尾处看到帮助者名单.

棋盘形状

{
  columns: [{
    id: ${unique-required-columnId},
    title: {$required-columnTitle**},
    cards: [{
      id: ${unique-required-cardId},
      title: ${required-cardTitle*}
      description: ${required-description*}
    }]
  }]
}

* 决 定 title 编辑 description 如果您使用卡片的默认模板,则需要使用。 您可以通过 renderCard 道具 (英语).

** 联合国 title 如果您正在使用列的默认模板,则需要该模板。 您可以通过 renderColumnHeader 道具 (英语).

++ Propals 软件

Prop说明已控制无控制
children (如果受控制则需要)董事会✅🚫
initialBoard (如果不受控制则需要)董事会🚫✅
onCardDragEnd卡片移动结束时会调用回话✅✅
onColumnDragEnd当列移动结束时调用✅✅
renderCard要制作的卡片而不是默认卡片✅✅
renderColumnHeader要打开的列头代替默认的列头✅✅
allowAddColumn允许用户添加新一列✅✅
onNewColumnConfirm (如果使用默认列添加模板则需要)当用户通过默认的列添加模板确认新列时调用回调✅✅
onColumnNew (如果 allowAddColumn 或何时 addColumn 名为)通过默认的列添加模板添加新一列时将调用回调🚫✅
renderColumnAdder要提供的列添加器而不是默认列添加器模板✅✅
disableColumnDrag禁用列移动✅✅
disableCardDrag禁用卡片移动✅✅
allowRemoveColumn允许删除默认列标题中的一列✅✅
onColumnRemove (如果 allowRemoveColumn 或何时 removeColumn 名为)删除一列时会调用的回调✅✅
allowRenameColumn允许在默认列标题中重命名一列✅✅
onColumnRename (如果 allowRenameColumn 或何时 renameColumn 名为)重命名列时调用✅✅
allowRemoveCard允许删除默认卡模板中的卡片✅✅
onCardRemove (如果 allowRemoveCard(中文(简体) )取消卡片时会调用回电✅✅
allowAddCard允许加卡. 期望在列中添加卡片的位置对象 .🚫✅
onCardNew (如果 allowAddCard 或何时 addCard 名为)通过默认的卡加模板添加出新卡时会调用的回调🚫✅
onNewCardConfirm (如果 allowAddCard(中文(简体) )用户通过默认的卡加模板确认新卡时调取的回调🚫✅

children

董事会 如果您想要控制董事会状态, 请使用此道具 .

initialBoard

董事会 如果您不想控制董事会状态, 请使用此道具 .

onCardDragEnd

当用户移动卡片时,这种回调会被称为通过这些参数:

参数说明
board修改后的棋盘
card移动的牌
source带有卡片源的对象 { fromColumnId, fromPosition }
destination具有卡片目的对象 { toColumnId, toPosition }
来源和目的地
Prop说明
fromColumnId列源代码.
toColumnId列目标 ID .
fromPosition列源数组中的卡片索引 .
toPosition卡片在列目的阵列中的索引.

onColumnDragEnd

当用户移动一列时,这种回调将被称作通过这些参数:

参数说明
board修改后的棋盘
column移动的一栏
source带有列源对象 { fromPosition }
destination带有列目的对象 { toPosition }
来源和目的地
Prop说明
fromPosition移动前的列索引 .
toPosition移动后的列索引.

renderCard

如果您想要制作自己的名片, 请使用此功能 。 您需要通过一个函数并返回您的卡片组件 . 该函数将接收这些参数:

参数说明
card纸牌道具
cardBag带有一些辅助功能的包, 并声明可以使用此卡
cardBag
函数说明
removeCard*调用此函数从列中移除卡
dragging牌是否被拖动

* 当董事会被控制时,它不可用.

说明:

const board = {
  columns: [{
    id: ${unique-required-columnId},
    title: ${columnTitle},
    cards: [{
      id: ${unique-required-cardId},
      dueDate: ${cardDueDate},
      content: ${cardContent}
    }]
  }]
}

<Board
  renderCard={({ content }, { removeCard, dragging }) => (
    <YourCard dragging={dragging}>
      {content}
      <button type="button" onClick={removeCard}>Remove Card</button>
    </YourCard>
  )}
>
{board}
</Board>

renderColumnHeader

如果您想要制作自己的列头, 请使用此选项 。 您需要通过一个函数并返回您的列标题组件 . 该函数将接收这些参数:

参数说明
column栏道具
columnBag带有一些辅助功能的包与列配合
columnBag
函数说明
removeColumn*调用此函数以删除棋盘中的列
renameColumn*使用标题调用此函数以重命名列
addCard*用新卡调用此函数可添加到列中

addCard: 作为第二个参数, 您可以通过一个选项来定义要添加卡片的列中的位置 :

  • { on: 'top' }: 在栏上方添加.
  • { on: 'bottom' }: 在列下方添加(默认).

* 当董事会被控制时,它不可用.

说明:

const board = {
  columns: [{
    id: ${unique-required-columnId},
    title: ${columnTitle},
    wip: ${wip},
    cards: [{
      id: ${unique-required-cardId},
      title: ${required-cardTitle},
      description: ${required-cardDescription}
    }]
  }]
}

<Board
  renderColumnHeader={({ title }, { removeColumn, renameColumn, addCard }) => (
    <YourColumnHeader>
      {title}
      <button type='button' onClick={removeColumn}>Remove Column</button>
      <button type='button' onClick={() => renameColumn('New title')}>Rename Column</button>
      <button type='button' onClick={() => addCard({ id: 99, title: 'New Card' })}>Add Card</button>
    </YourColumnHeader
  )}
>
  {board}
</Board>

allowAddColumn

允许用户直接由棋盘添加一新列.

onNewColumnConfirm

当用户通过默认的列添加器模板确认一列新时,此回调将使用由用户键入的标题的列草稿来调用.

如果你的董事会不控制你 必须 返回此调用中的新列及其新编号.

如果您的棋盘被控制, 请使用它来获取新的列标题 .

说明:

function onColumnNew (newColumn) {
  const newColumn = { id: ${required-new-unique-columnId}, ...newColumn }
  return newColumn
}

<Board initialBoard={board} allowAddColumn onColumnNew={onColumnNew} />

onColumnNew

当用户通过默认的列添加器模板添加出一新列时,这种回调将被称为通过更新的板和新列.

这种回调不会在不受控制的板上被调用.

renderColumnAdder

如果您想要制作自己的列添加器, 请使用此选项 。 您需要通过一个函数并返回您的列添加组件. 该函数将接收这些参数:

参数说明
columnBag带有一些助手功能的包
columnBag
函数说明
addColumn*用新列调用此函数以添加新列

* 当董事会被控制时,它不可用.

说明:

const ColumnAdder = ({ addColumn }) {
  return (
    <div onClick={()=> addColumn({id: ${required-new-unique-columnId}, title: 'Title', cards:[]})}>
      Add column
    </div>
  )
}

<Board
  allowAddColumn
  renderColumnAdder={({ addColumn }) => <ColumnAdder addColumn={addColumn} />}
  {board}
</Board>

disableColumnDrag

取消用户移动一列的功能.

disableCardDrag

取消用户的卡片移动功能 .

allowRemoveColumn

使用默认页眉模板时,不通过模板 renderColumnHeader,它将允许用户删除一列.

onColumnRemove

当用户删除一列时,此回调将被称作通过这些参数:

参数说明
board没有被删除一栏的棋盘
column删除的一栏

allowRenameColumn

使用默认页眉模板时,不通过模板 renderColumnHeader,它将允许用户重命名一列.

onColumnRename

当用户重命名一列时,此回调将被称为通过这些参数:

参数说明
board带有更名栏的棋盘
column重命名的一栏

allowRemoveCard

当使用默认的卡片模板时, 当您没有通过模板时 renderCard,它将允许用户去除一张卡.

onCardRemove

当用户去掉一卡时,这种回调将被称为通过这些参数:

参数说明
board没有被删除一栏的棋盘
column没有取出卡片的列
card被移除的卡片

allowAddCard

允许用户直接由棋盘在列中添加一卡. 默认情况下,它会在列下方添加卡片,但您可以通过"上"道具通过一个对象来指定您是想要在棋盘上方还是下方添加.

例如: / 默认位于下方 < Board 允许 AddCard}\: 在列下方的“ 下方” / > / 上 <BOARD 允许AddCard> 上 : 'top' / > / 在列上方

用于控制板的助手

moveColumn

参数说明
board你的董事会
{ fromPosition }待移行索引
{ toPosition }要移动的列的索引目的地

moveCard

在受控板上使用这个,"从"和"从"是同一种传递给"CardDragEnd"的回调. 您可以在您的 onCardDragEnd 调用中使用此功能, 以更新您的棋盘, 因为它将返回一个新的棋盘, 您可以将它保存到状态 .

参数说明
board你的董事会
{ fromPosition, fromColumnId }带有卡片源的对象 { fromColumnId, fromPosition } 这些是卡片当前位置的索引
{ toPosition, toColumnId }具有卡片目的对象 { fromColumnId, fromPosition } 它们是卡片的索引新位置

addColumn

参数说明
board你的董事会
column待加栏

removeColumn

参数说明
board你的董事会
column要删除的列

changeColumn

参数说明
board你的董事会
column要重命名的列
object传递要与列合并的对象。 您可以添加新的道具和/或更改现有的道具

addCard

参数说明
board你的董事会
inColumn添加卡片的列
card将加卡
-=ytet -伊甸园字幕组=- 翻译:{\fn黑体\fs20\shad2\2ah82\3ah20\4ah33\fscx95\3ch592001\be1}上边的 {\fn黑体\fs20\shad2\2ah82\3ah20\4ah33\fscx95\3ch592001\be1}

changeCard

参数说明
board你的董事会
cardId牌的代号要更改
object传递要与卡片合并的对象 。 您可以添加新的道具和/或更改现有的道具

onCardNew

当用户通过默认的卡添加器模板添加出一副新卡后,这种回调将被称为通过更新的板和新卡.

onNewCardConfirm

当用户通过默认的卡添加器模板确认新卡后,这种回调将使用带有标题和用户打入的描述的卡片草稿来调用.

你个 必须 返回新卡,并用它的新编号在此回调中.

说明:

function onCardNew (newCard) {
  const newCard = { id: ${required-new-unique-cardId}, ...newCard }
  return newCard
}

<Board initialBoard={board} allowAddCard onNewCardConfirm={onCardNew} onCardNew={console.log} />

removeCard

参数说明
board你的董事会
fromColumn将牌放在哪里
card要删除的牌

{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}史蒂林 {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢

您既可以对所有棋盘进行样式调整,也可以导入我们的样式,并按您想要的样式覆盖:

类
react-kanban-board
react-kanban-card
react-kanban-card-skeleton
react-kanban-card--dragging
react-kanban-card__description
react-kanban-card__title
react-kanban-column
react-kanban-card-adder-form
react-kanban-card-adder-button
react-kanban-card-adder-form__title
react-kanban-card-adder-form__description
react-kanban-card-adder-form__button
react-kanban-column-header
react-kanban-column-header__button
react-kanban-column-adder-button

测试

单位

yarn test

代码覆盖被保存在 coverage 文件夹。 例如,打开 HTML 报表

open coverage/lcov-report/index.html

端对端

使用 齐压 试跑者。 启动 Dev 服务器并使用 Cypress 打开

yarn dev

所有测试都在 细胞压/整合 文件夹。 这些测试还收集了代码覆盖,并保存了多种格式的 coverage 文件夹。 打开 HTML 报表

open coverage/lcov-report/index.html

读取 Cypress 代码覆盖指南

注:避免插入 babel-plugin-istanbul 在测试时,E2E测试与 NODE_ENV=cypress 环境变量。 这个 babel-plugin-istanbul 插件包含在 .babelrc 图像 只有文件在 cypress 节点环境, 留下默认的 Jest 配置 NODE_ENV=test 同样的.

* 路线图

您可以查看下一个功能 这里。 。 。 . 欢迎你帮我们做公关.

捐款

欢迎公关:

  • 叉开这个项目.
  • 设置它:
    yarn
    yarn start
    
  • 做你的零钱.
  • 请将自己加入贡献者表格(我们使用 所有贡献者 为此,我们首先需要安装:
    yarn contributors:add
    
  • 打开公关.

* 捐款准则

  • 你需要测试你的零钱.
  • 试着清净你的零钱。 CodeClimate会盯着你的.
  • 它必须传递给CI.

版本与发布记录

@asseinfo/react-kanban 共发布 3 个版本,首次发布于 2021/06/24;过去 12 个月发布了 0 个版本。

版本发布日期距今
2.2.0latest2021/09/235 年前
2.1.02021/06/245 年前
0.17.02021/06/225 年前

关于 @asseinfo/react-kanban 的常见问题

@asseinfo/react-kanban 是什么?

又一个Kanban/Trello board lib for React. 康班/特雷罗董事会发布反弹.

如何安装 @asseinfo/react-kanban?

在项目目录运行 npm install @asseinfo/react-kanban,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:react(^16.8.0 || ^17.0.0)、react-dom(^16.8.0 || ^17.0.0)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@asseinfo/react-kanban 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/asseinfo__react-kanban 是否存在。

@asseinfo/react-kanban 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@asseinfo/react-kanban 可以商用吗?

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

@asseinfo/react-kanban 的下载量有多少?

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

@asseinfo/react-kanban 还在维护吗?

最新版本 2.2.0 发布于 2021/09/23(5 年前);至今共发布 3 个版本,其中过去 12 个月发布了 0 个;首次发布于 2021/06/24。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。