React中常量使用方案咨询:重复导入或其他方式?
常量
FEE_TYPES多组件使用方案建议 背景
常量定义在如下文件中:
admin/constants/serviceConstants
const FEE_TYPES = { flat: "flat", perUnit: "per_unit", };
我有index.js、List.js、Form.js、Row.js这几个组件,全部需要用到这个常量。目前的做法是每个文件单独导入:
import { FEE_TYPES } from "admin/constants/serviceConstants";
现在纠结要不要换成其他方案,比如:
- 通过props传递,例如
<List feeTypes={FEE_TYPES} /> - 在MobX Form中定义为静态变量后供组件使用
下面是各方案的分析和建议:
各方案优劣对比
1. 直接导入(当前方案)
这是最推荐的做法,理由很直接:
- 清晰直观:每个组件的依赖一目了然,看代码就知道
FEE_TYPES来自哪里 - 无冗余工作量:不用层层传递props,避免了“props drilling”的麻烦(比如
Row是List的子组件,还要把常量从List传到Row,完全没必要) - 安全可靠:常量只读,直接导入不会被意外修改
唯一的“缺点”就是每个组件要写一次导入语句,但这是模块化开发的常规操作,维护成本几乎为零。
2. Props传递方案
这种方案只适合常量需要动态变化的场景(比如父组件要根据不同情况传入不同的类型配置),但你的FEE_TYPES是固定常量,完全没必要这么做:
- 会增加无意义的props传递工作,层级越深越麻烦
- 组件依赖变得不透明,看子组件代码时,得往上翻好几层才能找到
feeTypes的来源
3. MobX Form静态变量方案
如果你的项目没有把这个常量和表单逻辑深度绑定,这种做法属于过度设计:
- 把纯常量和状态管理库耦合,以后换状态管理工具时还要修改这部分代码
- 简单问题复杂化,反而增加了维护成本
最终建议
就用你当前的直接导入方案就行,这是前端处理全局常量的标准方式,简洁、高效、易维护。
只有当你有明确的动态配置需求、测试mock需求,或者这个常量必须和MobX的业务逻辑绑定的时候,再考虑后面两种方案。
内容的提问来源于stack exchange,提问作者prajeesh
相关产品推荐
相关产品推荐

