Reactjs 我应该在何时将命名导入与React挂钩一起使用?

Reactjs 我应该在何时将命名导入与React挂钩一起使用?,reactjs,ecmascript-6,import,react-hooks,es6-modules,Reactjs,Ecmascript 6,Import,React Hooks,Es6 Modules,我想知道,在处理涉及React钩子的复杂模块时,是应该使用默认导入和命名导入的组合,还是坚持使用默认导入 使用如下所示的默认和命名导入 import-React,{Children,createRef,isValidElement,useCallback,useState}来自'React'; const[someBool,setBool]=useState(true); useffect(()=>{…},[]); useCallback(()=>{…},[]); const childRefs

我想知道,在处理涉及React钩子的复杂模块时,是应该使用默认导入和命名导入的组合,还是坚持使用默认导入

使用如下所示的
默认和命名导入

import-React,{Children,createRef,isValidElement,useCallback,useState}来自'React';
const[someBool,setBool]=useState(true);
useffect(()=>{…},[]);
useCallback(()=>{…},[]);
const childRefs=Children.map(props.Children,child=>createRef());
if(isValidElement(child)){…}
默认导入
,如下所示

从“React”导入React;
const[someBool,setBool]=React.useState(true);
React.useffect(()=>{…},[]);
useCallback(()=>{…},[]);
const childRefs=React.Children.map(props.Children,child=>React.createRef());
if(React.isValidElement(child)){…}
我从命名导入开始,当只有简单的钩子时效果很好,但是当像
react.Children.map
react.createRef
这样的传统react函数出现时,它就变得很糟糕了


使用React挂钩导入模块的最佳做法是什么?

该决定纯粹是风格上的,您选择的内容不会对您的应用程序产生影响。这就是说,JavaScript风格的指南确实存在,并且有足够的使用率,我很乐意参考它们,以便在同事之间建立编码指南

Airbnb没有关于命名导入与默认导入的规则。他们的规则也没有偏好。值得注意的是,他们的React示例使用默认导入

谷歌在他们的网站上有点接近这个话题

3.4.2.1命名vs默认导出

在所有代码中使用命名导出。您可以对声明应用
export
关键字,或使用
export{name}语法

不要使用默认导出。导入模块必须为其指定名称 这些值,可能会导致跨域命名不一致 模块

此规则要求必须使用命名导出导出代码,这将导致在整个代码库中使用命名导入。他们没有关于导入模块的规则,但有人可能会说,如果您选择遵循此规则,那么为React使用命名导入看起来会与代码库的其余部分更加一致

“Hooks-at-Glance”文档页面使用命名导入。我认为有理由假设社区中的大多数人都会通过命名导入来学习,而大多数React代码都会使用命名导入



就个人而言,我使用命名导入没有特殊原因。我就是这样学的,没有质疑。我的代码库强制执行了一个,我想使用命名导入可以减少我违反该规则的可能性,这至少是一个小小的胜利。

您更喜欢哪一个?使用这个。我个人的经验法则是,如果在给定文件中多次使用它,请使用命名导入。自挂钩启动以来,我一直在使用命名导出。对于TS类型,我倾向于使用
React.TypeName
。这会创建一个难看的边界,因为
React.ReactNode
看起来很奇怪,所以
memo(组件)
而不是
React.memo
。使用
React.stuff
everywhere可以用一个简单的代码库范围的规则来代替模态,这可能是我喜欢的。也许,这就是假设将来事情会像lodash通过webpack和babel插件所做的那样发生巨大变化的方式?渴望听到关于这方面的想法。使用
React.stuff
时,DX可能会感觉更好,尽管有额外的冗长。