问题描述
我正在为功能组件创建PropTypes
,并且我想对从另一个文件导入的对象使用PropTypes.oneOf
:
import { MODES } from '../../../Users';
(...)
ManageUserForm.propTypes = {
mode: PropTypes.oneOf(Object.values(MODES)),}
在Users.js
中,模式如下所示:
export const MODES = {
add: 'add',edit: 'edit',changePassword: 'changePassword',block: 'block',unblock: 'unblock',delete: 'delete'
};
但是我收到一条错误消息,指出 MODES 是undefined
。现在,我仅对值进行硬编码解决了问题,但是这很微不足道,我想对其进行改进。我该怎么办?
编辑:我在沙箱中重新创建了问题: codesandbox.io
解决方法
这可以工作,但是我建议将其保存在同一文件中,因为在定义原型时未将其导入。
ManageUserForm.propTypes = {
mode: PropTypes.oneOf(Object.values(require('../../../Users'))),}
这是一个代码沙盒示例 https://codesandbox.io/s/react-example-forked-y1br4?file=/index.js
,您具有循环依赖项。
- 首先,代码从
Users.js
导入App.js
。 - 然后
Users.js
导入UserCreator.js
。 - 然后
UserCreator.js
导入ManageUserForm.js
。 - 然后
ManageUserForm.js
再次导入Users.js
所有这些甚至在定义MODES
变量之前。
您不应该在Users.js
中导入ManageUserForm.js
,因为Users.js
本身取决于ManageUserForm.js
到UserCreator.js
。
您可以将MODES
的定义移至ManageUserForm.js
并将其导入Users.js
,或者最好将其完全移至单独的文件。