【发布时间】:2020-01-15 00:45:06
【问题描述】:
我想知道在处理涉及 React 钩子的复杂模块时是否应该使用默认导入和命名导入的组合,或者坚持使用默认导入。
使用default and named imports,如下所示,
import React, { Children, createRef, isValidElement, useCallback, useState } from 'react';
const [someBool, setBool] = useState(true);
useEffect(() => {...}, []);
useCallback(() => {...}, []);
const childRefs = Children.map(props.children, child => createRef());
if (isValidElement(child)) {...}
或default imports 仅如下所示。
import React from 'react';
const [someBool, setBool] = React.useState(true);
React.useEffect(() => {...}, []);
React.useCallback(() => {...}, []);
const childRefs = React.Children.map(props.children, child => React.createRef());
if (React.isValidElement(child)) {...}
我从命名导入开始,当只有简单的钩子时效果很好,但当像 React.Children.map 和 React.createRef 这样的传统反应函数出现时,它就变得丑陋了。
使用 React 钩子导入模块的最佳实践是什么?
【问题讨论】:
-
你更喜欢哪一个?使用那个。
-
我个人的经验法则是,如果您在给定文件中多次使用它,请使用命名导入。
-
自从钩子发布以来,我一直在使用命名导出。对于 TS 类型,虽然我倾向于使用
React.TypeName。这会产生一个丑陋的边界,因为React.ReactNode看起来很奇怪,所以memo(Component)而不是React.memo。在任何地方使用React.stuff可以用一个简单的代码库范围的规则替换模态,我可能会喜欢。也许,这就是假设事情可以在未来像通过 webpack 和 babel 插件为 lodash 所做的那样进行 tree-shaking 的方式?很想听听对此的想法。 DX 感觉可能更好React.stuff尽管额外冗长。
标签: reactjs ecmascript-6 import react-hooks es6-modules