@stenajs-webui/filter

中文文档
25.3.3发布于 2026/11/02MITTypeScriptESM + CJS

这个包包含组件和功能,可以轻松地在抽屉中创建自定义过滤器,以及包含芯片的概述行。

中文使用文档
文档目录4 节
  1. DateRangeCalendarSection
  2. ChipMultiSelectSection
  3. 芯片
  4. 手动芯片

stenajs-webui /过滤器

这个包包含组件和功能,使它 易于在抽屉中创建自定义过滤器,以及包含芯片的概述行。

这个包裹是alpha。API很可能会改变,并添加更多的功能。 如果您使用它,请准备好进行破坏性更改。

一节

截面是过滤器的一个可扩展部分。过滤器可以由许多部分组成。各节可何无,一节可何无 或者很多芯片。

上下文

过滤器组件访问状态、分派和操作。这些是从上下文获取的,所以任何过滤器组件都必须 被…包裹着

<SearchFilterContext actions={actions} state={state} dispatch={dispatch}>
  <SearchFilterButton/>
  <SearchFilterChips>
    <SectionChips {...stuff} />
  </SearchFilterChips>
  <SearchFilterDrawer>
    ... sections
  </SearchFilterDrawer>

如果你只使用本地状态(没有Redux、持久化等), 你可以用 SearchFilterLocalStateContext. 它将自动设置动作、状态和分派。

<SearchFilterLocalStateContext<FormModel>
  initialFormModel={{ startDate: undefined, endDate: undefined }}
>
  ... same as above
</SearchFilterLocalStateContext>

如果你使用 SearchFilterLocalStateContext,您可以使用它来访问过滤器状态。

const state = useSearchFilterState();

自定义部分

您可以轻松地创建自定义节。

const MySection = (...props) => (
  <SearchFilterSection sectionId={sectionId} loading={loading} error={error}>
    <ChipMultiSelect
      options={filteredOptions}
      value={listValue}
      onValueChange={onValueChangeInternal}
      inputValue={text}
      onInputChange={setText}
    />
  </SearchFilterSection>
);

参见源代码以获得示例。

随时可用的部分

有一些章节可供使用。

更多的将提供作为 filter 包的成熟。

DateRangeCalendarSection

将该部分添加到抽屉中。

<DateRangeCalendarSection
  sectionId={"comparisonDate"}
  {...createDateRangeSectionProps(state.formModel, "startDate", "endDate")}
/>

然后加入薯片。

<SectionChips
  sectionId={"comparisonDate"}
  emptyChipLabel={"No dates"}
  {...createChipsPropsForDateRange(state.formModel, "startDate", "endDate")}
/>

ChipMultiSelectSection

将该部分添加到抽屉中。本节没有用于创建道具的辅助方法。

必须手动指定。这种情况可能会改变。

<ChipMultiSelectSection
  sectionId={"divisions"}
  loading={false}
  options={divisionOptions}
  value={state.formModel.divisions}
  onValueChange={(divisions) =>
    dispatch(actions.setFormModelFields({ divisions }))
  }
/>

然后加入薯片。

<SectionChips
  sectionId={"divisions"}
  emptyChipLabel={"All division"}
  {...createChipsPropsForBooleanRecord(
    state.formModel,
    "divisions",
    divisionOptions
  )}
/>

在这个例子中, state.formModel.divisions 一定是。 BooleanRecord.

另一个部分 BooleanRecord 是 SimpleCheckboxListSection. 它们与API兼容并且可以互换。

<SimpleCheckboxListSection
  sectionId={"divisions"}
  loading={false}
  options={divisionOptions}
  value={state.formModel.divisions}
  onValueChange={(divisions) =>
    dispatch(actions.setFormModelFields({ divisions }))
  }
/>

芯片

您可以添加所有芯片为一个部分使用 SectionChips 组件。

<SectionChips
  sectionId={"divisions"}
  emptyChipLabel={"All division"}
  {...createChipsPropsForBooleanRecord(
    state.formModel,
    "divisions",
    divisionOptions
  )}
/>

手动芯片

如果您需要对每个芯片进行更多的手动控制,可以单独添加它们。

{
  myList.map(({ value, label }) => (
    <SearchFilterChip
      key={value}
      label={label ?? sectionId}
      sectionId={sectionId}
      onClickRemove={onClickRemoveOnChip}
      value={value}
    />
  ));
}

如果你需要一个芯片来表示没有选择,你可以使用 EmptyChip.

<EmptyChip sectionId={sectionId} label={emptyChipLabel} />

版本与发布记录

@stenajs-webui/filter 共发布 506 个版本,首次发布于 2021/11/18;过去 12 个月发布了 86 个版本。

版本发布日期距今
25.3.3latest2026/11/02今天
25.3.22026/10/303 天前
25.3.12026/10/285 天前
25.3.02026/10/276 天前
25.2.02026/10/277 天前
25.1.72026/10/2310 天前

其他发布通道:next → 19.0.0-next.76。

关于 @stenajs-webui/filter 的常见问题

@stenajs-webui/filter 是什么?

这个包包含组件和功能,可以轻松地在抽屉中创建自定义过滤器,以及包含芯片的概述行。

如何安装 @stenajs-webui/filter?

在项目目录运行 npm install @stenajs-webui/filter,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:react(>=19.0.0)、redux(>=5.0.1)、react-dom(>=19.0.0)、prop-types(>=15.5.4)、@emotion/react(>=11.14.0)、@emotion/styled(>=11.14.0)、@types/lodash-es(>=4.17.12)、@fortawesome/fontawesome-svg-core(>=6.7.2)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@stenajs-webui/filter 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@stenajs-webui/filter 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@stenajs-webui/filter 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=8。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@stenajs-webui/filter 可以商用吗?

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

@stenajs-webui/filter 还在维护吗?

最新版本 25.3.3 发布于 2026/11/02(今天);至今共发布 506 个版本,其中过去 12 个月发布了 86 个;首次发布于 2021/11/18。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。