Javascript 为什么我必须为组件创建index.js文件?
我最近启动了一个react项目,我发现一些使用npm的util命令可以自动生成一些项目。这没问题,但项目结构对我来说有点混乱,所以我在谷歌上搜索了一些解释,一切都很好,我在上面找到了一些有趣的东西: 虽然组件可以驻留在src/components/my component name中,但它是 建议在该目录中包含index.js。因此,无论何时 有人使用src/components/my component name导入组件, 这将实际导入目录,而不是导入目录 index.js文件 这个index.js文件,我应该如何创建它来返回组件 例如,我想为不同的路线创建一些页面:Javascript 为什么我必须为组件创建index.js文件?,javascript,reactjs,Javascript,Reactjs,我最近启动了一个react项目,我发现一些使用npm的util命令可以自动生成一些项目。这没问题,但项目结构对我来说有点混乱,所以我在谷歌上搜索了一些解释,一切都很好,我在上面找到了一些有趣的东西: 虽然组件可以驻留在src/components/my component name中,但它是 建议在该目录中包含index.js。因此,无论何时 有人使用src/components/my component name导入组件, 这将实际导入目录,而不是导入目录 index.js文件 这个index
import React, {Component} from 'react'
class MyPage extends Component{
render() {
return (
<div>
My Page
</div>
);
}
}
export default MyPage;
路由器组件应该没有问题,因为没有index.js我只需导入MyPage
并执行如下操作:
<Router>
<div>
<Route path="/" component={MyPage} />
</div>
</Router>
这是创建index.js文件的正确方法吗?当您有许多组件需要从给定文件夹导出,并且希望在导入到的文件中对其进行分解时,可以使用index.js文件。你根本不必遵循这一点,但这样做仍然是最佳实践;当导出大量文件(例如从Redux中的reducer或包含大量较小组件(如
或
)的实用程序文件夹)时,会更容易,如果所有内容都合并到一个索引文件而不是多个不同的文件中,则其他用户更容易阅读
index.js
export {default as Input} from './Input';
export {default as Button} from './Button';
export {default as TextField} from './TextField';
index.js具有特殊属性,如果从文件导入,javascript将在未指定其他内容的情况下查找index.js。无论哪种方法都可以,但对于使用index.js的大型应用程序,您更愿意使用它。这绝对是一种构建组件的策略。如果你想,这取决于你自己
index.js
被webpack以不同的方式处理,因此您可以从“/components/MyPage导入MyPage,并将import.js
放在一边。使用这种做法的一种常见方法是只导入组件,然后从index.js再次导出组件:
MyPage.js
const MyPage = () => <div>Hello world</div>;
export default MyPage;
import MyPage from './MyPage.js';
export default MyPage;
这是关于创建react app
,但作者将自己的观点放在首位,并将其呈现出来,就好像它们是既定事实一样
如果您实际查看了create react app
文档(这总是一个好主意:从源代码开始,如果官方文档没有涵盖您需要了解的内容,则转到教程),例如,您可以看到它们精确地显示了您的文章所说的不要做的事情:它从名为button.js
的文件中导入了
组件
无论如何,如果你想的话,可以使用
index.js
(在某些情况下这样做是一个很好的主意),但是create react app
不在乎,它不“建议在该目录中有一个index.js”,这篇文章只是误导。添加index.js
,是有原因的,它们与create-react-app
、react-in-general,甚至是以课堂形式编写js的实践完全无关。谁告诉你的?事实上,React并不能让这个“更好”或“更受欢迎”。事实上,对单个组件使用index.js
只是一种混乱。如果您有一个索引,允许您说const{MyComponent、SecondaryComponent、ChildThing和more}=require('./components/
);`,当然这是有用的,但是对于单个组件来说,这个建议没有什么意义。你能举出你的来源吗?你不必,它只是让你更容易控制你的模块接口。这不是React-specific,而是通用的JS;关于index.js | ts | html | jsx | tsx
这只是每个产品和专业人士期望的方式,没有什么特别的;这就是工具和人们习惯和进化的方式。就像早期编程时的“Hello World”index.js
文件就像一个容器,可以在其中呈现页面的所有子组件。这有助于将代码分成更小的块,从而提高可读性和测试性首先,感谢您抽出时间,但我不认为我理解您的答案。好的,从Button.js
导入Button
组件不是一个好主意,我理解这一点,但我想强调的是,不是导入目录,而是导入index.js文件->和我的问题:导入组件时默认情况下是否在查找index.js文件??
form.js
import {Input, Button, TextField} from './UtilityFile
const MyPage = () => <div>Hello world</div>;
export default MyPage;
import MyPage from './MyPage.js';
export default MyPage;