You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何创建并命名分别使用Redux状态与props传参的相同组件及Redux容器?

你的整体实现完全符合Redux的「展示组件/容器组件」拆分规范,是非常标准的最佳实践:

  • 拆分后的无状态AsyncButton完全和数据源解耦,复用性极强,既可以接入Redux store使用,也可以在不需要连接store的场景下直接通过props传入isRequesting自定义控制状态,适配多种业务场景。
  • 容器组件仅负责从Redux store拉取状态、注入到展示组件,不包含任何UI逻辑,职责拆分清晰,后续维护成本很低。

关于命名的问题:ConnectedAsyncButton是Redux社区非常通用的标准命名方式,所有熟悉Redux的开发者看到这个命名就能立刻知道它是和Redux store绑定后的组件版本,完全没有问题。如果你的团队有自己的命名约定,也可以调整为更符合团队习惯的写法,比如部分团队会选择将基础展示组件命名为AsyncButtonBase,将绑定store后的容器组件命名为AsyncButton作为默认对外导出的版本,需要自定义控制状态时再单独引入AsyncButtonBase即可,两种方式都合规,可以根据实际场景选择。

可以补充的小优化点:

  1. 可以给展示组件的isRequesting设置默认值为false,避免使用时漏传参数导致的异常:
function AsyncButton({ children, isRequesting = false, ...props }) {
  return (
    <Button disabled={isRequesting} {...props}>
      {children}
      {isRequesting && <LoadingSpinner />}
    </Button>
  );
}
  1. 可以同时导出两个版本的组件,方便不同场景按需使用:
// 导出基础展示组件,供自定义控制场景使用
export { AsyncButton }
// 导出绑定store的版本,供大多数常规场景直接使用
export default ConnectedAsyncButton

内容的提问来源于stack exchange,提问作者xandert.93

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 12:45:04