索引表
索引表显示相同类型的对象的集合,如订单或产品。索引表的主要工作是帮助商家对对象有一个概览,以便执行操作或导航到它的整个页面表示。
包含简单项的索引表,没有批量操作、排序或过滤。
进口{IndexTable,TextStyle,卡,useIndexResourceState,}从“@shopify /北极星”;进口反应从“反应”;函数SimpleIndexTableExample(){常量客户=({id:“3411”,url:“客户/ 341”,名字:“美Jemison”,位置:美国迪凯特的,订单:20.,amountSpent:“2400美元”,},{id:“2561”,url:“客户/ 256”,名字:“艾伦·奥乔亚”,位置:“美国洛杉矶”,订单:30.,amountSpent:“140美元”,},];常量resourceName={单数:“客户”,复数:“客户”,};常量{selectedResources,allResourcesSelected,handleSelectionChange}=useIndexResourceState(客户);常量rowMarkup=客户.地图(({id,名字,位置,订单,amountSpent},指数)= >(<IndexTable.行id={id}关键={id}选择={selectedResources.包括(id)}位置={指数}><IndexTable.细胞><TextStyle变异=“强”>{名字}</TextStyle></IndexTable.细胞><IndexTable.细胞>{位置}</IndexTable.细胞><IndexTable.细胞>{订单}</IndexTable.细胞><IndexTable.细胞>{amountSpent}</IndexTable.细胞></IndexTable.行>),);返回(<卡><IndexTable resourceName={resourceName}itemCount={客户.长度}selectedItemsCount={allResourcesSelected?“所有”:selectedResources.长度}onSelectionChange={handleSelectionChange}标题={({标题:“名字”},{标题:“位置”},{标题:的订单数量},{标题:“支出”},]}>{rowMarkup}</IndexTable></卡>);}
道具
想让这个功能变得更好吗?请分享你的反馈.
- 标题 (T, …T[]]<|>
- promotedBulkActions? (|(&)) []
- bulkActions? (|(&)) []
- 孩子们? 反应.ReactNode
- emptyState? 反应.ReactNode
- 排序? 反应.ReactNode
- paginatedSelectAllActionText? 字符串
- lastColumnSticky? 布尔
- 可选择的? 布尔
- 可分类的? 布尔[]
-
布尔值列表,它映射到是否为每个列启用排序。所有列默认为false。
- defaultSortDirection? “提升”|“降序”
-
在首次单击或按下可排序列标题时对表行进行排序的方向。默认为升序。
默认为“降序”.
- sortDirection? “提升”|“降序”
-
当前排序方向。
- sortColumnIndex? 数量
-
表行按其排序的标题的索引。
- onSort? (headingIndex:数量,方向:“提升”|“降序”) = >无效
-
单击或按下可排序的列标题时触发的回调。
- sortToggleLabels?
-
每个可排序列的可选排序切换标签字典,带有升序和降序标签,以键作为列的索引。
- itemCount 数量
- selectedItemsCount? 数量|“所有”
- resourceName? {单数:字符串;复数:字符串;}
- 加载? 布尔
- hasMoreItems? 布尔
- 浓缩? 布尔
- onSelectionChange? (selectionType:SelectionType,toggleType:布尔,选择吗?字符串|范围) = >无效
索引表还可以:
构建
在项目中使用索引表涉及以下组件和子组件的组合:
- IndexTable
- IndexTableRow
- IndexTableCell
- 过滤器(可选)
- 分页组件(可选)
索引表组件提供用于列表排序、过滤和分页的UI元素,但不提供这些操作的逻辑。当排序选项发生更改、添加过滤器或请求第二页时,您需要处理该事件(包括任何网络请求),然后用新道具更新组件。
目的
Shopify围绕代表商家业务的对象(如客户、产品和订单)进行组织。例如,每个单独的订单都有一个可以链接到的专用页面。在Shopify中,我们称这些类型为对象资源,我们称对象的专用页为its详细信息页面.
问题
以订单为例。商人可能有很多这样的人。他们需要一种方法来扫描他们的订单,查看每个订单的不同属性,并找出哪些需要首先采取行动。换句话说,他们需要一种方法找到单个订单,调用有关该订单的更多信息,并对其采取行动。
解决方案
索引表的作用如下:
- 一种内容格式,表示一组单独的资源,每个资源都有多列信息
- 对一个或多个独立资源采取行动的系统
- 导航到单个资源详细信息页面的一种方法
由于详细信息页面显示单个资源的所有内容和操作,因此可以将资源列表视为这些详细信息页面的摘要。通过这种方式,资源列表在Shopify的导航层次结构中架起了一个中间的桥梁。
最佳实践
索引表应该:
- 具有在单击时执行操作的项。操作应该导航到资源的详细信息页面,或者提供有关该项的更多详细信息。
- 自定义内容和布局他们的项目行表面信息,以支持商家的需求。
- 如果列表可能很长,特别是如果不同的商业任务受益于不同的排序顺序,则支持排序。
- 支持过滤如果列表可以很长。
- 当当前列表包含超过50个项目时进行分页。
- 使用框架页面如果加载prop为true且项正在处理,则在初始页面加载时为页面的其余部分加载组件。
索引表可以选择:
- 为经常一次应用于多个列表项的任务提供批量操作。例如,商家可能希望为大量产品添加相同的标签。
内容的指导方针
索引表应该:
- 标识资源的类型,通常带有标题
做
- 产品
- 展示50种产品
不
- 没有标题
- 指示何时不显示资源的所有成员。对于汇总和链接最近购买的产品的卡片:
做
- 本周热门产品
不
- 产品
批量动作遵循动词+名词的公式
IndexTableRow
一个IndexTableRow
类型中表示项的行IndexTable
IndexTableRow属性
道具 | 类型 | 描述 |
---|---|---|
id | 字符串 | 行的唯一标识符 |
选择 | 布尔 | 指示行是否被选中的布尔属性 |
位置 | 数量 | 行的索引位置 |
柔和 | 布尔 | 一个布尔属性,指示行是否应该被抑制 |
状态 | RowStatus | 指示行是否应该具有状态的属性 |
禁用 | 布尔 | 指示是否应禁用该行的布尔属性 |
onClick | () =>无效 | 一个覆盖默认点击行为的函数 |
IndexTableCell
一个IndexTableCell
中的单个单元格IndexTableRow
IndexTableCell属性
道具 | 类型 | 描述 |
---|---|---|
冲洗 | 布尔 | 一个布尔属性,指示单元格是否应该删除默认填充 |
类名称 | 字符串 | 向单元格添加一个类,用于设置单元格的宽度 |