如何创建并命名分别使用Redux状态与props传参的相同组件及Redux容器?
你的整体实现完全符合Redux的「展示组件/容器组件」拆分规范,是非常标准的最佳实践:
- 拆分后的无状态
AsyncButton完全和数据源解耦,复用性极强,既可以接入Redux store使用,也可以在不需要连接store的场景下直接通过props传入isRequesting自定义控制状态,适配多种业务场景。 - 容器组件仅负责从Redux store拉取状态、注入到展示组件,不包含任何UI逻辑,职责拆分清晰,后续维护成本很低。
关于命名的问题:ConnectedAsyncButton是Redux社区非常通用的标准命名方式,所有熟悉Redux的开发者看到这个命名就能立刻知道它是和Redux store绑定后的组件版本,完全没有问题。如果你的团队有自己的命名约定,也可以调整为更符合团队习惯的写法,比如部分团队会选择将基础展示组件命名为AsyncButtonBase,将绑定store后的容器组件命名为AsyncButton作为默认对外导出的版本,需要自定义控制状态时再单独引入AsyncButtonBase即可,两种方式都合规,可以根据实际场景选择。
可以补充的小优化点:
- 可以给展示组件的
isRequesting设置默认值为false,避免使用时漏传参数导致的异常:
function AsyncButton({ children, isRequesting = false, ...props }) { return ( <Button disabled={isRequesting} {...props}> {children} {isRequesting && <LoadingSpinner />} </Button> ); }
- 可以同时导出两个版本的组件,方便不同场景按需使用:
// 导出基础展示组件,供自定义控制场景使用 export { AsyncButton } // 导出绑定store的版本,供大多数常规场景直接使用 export default ConnectedAsyncButton
内容的提问来源于stack exchange,提问作者xandert.93
相关产品推荐
相关产品推荐

