我很困惑,或者我可以说,我不知道导出实际上是如何工作的。
我有一个React应用,我有一些受保护的路由。在登录时,我创建了一个Client
对象实例,并通过Context将其传递给子组件,然后使用它。
最近我看到一种方法,示例代码直接从文件导出对象实例,然后将其导入到他们想要使用它的文件中。
/** My approach **/
export default Example
/** The Object Instance approach **/
export default new Example()
对象实例的生命周期是什么?第二种方法是否有缺点,因为它看起来更简单?
如果导出类,使用
export default Example
则模块的消费者将能够实例化他们自己的实例,并且每个实例将能够拥有自己的数据。例如
// 1.js
import TheClass from './TheClass';
const tc1 = new TheClass();
tc1.foo = 'foo';
// 2.js
import TheClass from './TheClass';
const tc2 = new TheClass();
tc2.foo = 'bar';
两个模块可以继续完全独立地使用tc1
和tc2
,因为它们是单独的实例。
// 1.js
import theInstance from '...';
theInstance.foo = 'foo';
// 2.js
import theInstance from '...';
// might not be a good idea to do theInstance.foo = 'bar' here
// because that will affect 1.js as well
// and will affect any other modules that imported the instance
简而言之,导出类比导出实例更容易重用。有时潜在的可重用性是脚本编写者认为重要的东西,有时则不然。(有时,即使您一开始并不认为它有用,但以后可能会遇到迫使您重新考虑的情况。)
有时你想确保在一个脚本中只有一个实例,在这种情况下
export default new Example()
是完成它的一种方法。