Javascript 导入如何与react一起工作?
我更广泛的问题是模块的导入是否在两个组件之间共享?为什么 首先,我对进口了解多少。您可以用两种不同的方式导入 一,。 在文件顶部,将导入的模块加载到一个变量中,然后可以使用该变量Javascript 导入如何与react一起工作?,javascript,reactjs,import,Javascript,Reactjs,Import,我更广泛的问题是模块的导入是否在两个组件之间共享?为什么 首先,我对进口了解多少。您可以用两种不同的方式导入 一,。 在文件顶部,将导入的模块加载到一个变量中,然后可以使用该变量 import Highcharts from './highcharts' // create a chart Highcharts.Chart() 二,。 或者在代码中的任何位置动态返回承诺: import('./highcharts').then((response) => { // create ch
import Highcharts from './highcharts'
// create a chart
Highcharts.Chart()
二,。
或者在代码中的任何位置动态返回承诺:
import('./highcharts').then((response) => {
// create chart
response.Chart();
});
但是在使用import和react时,有一种奇怪的行为我不理解。如果我有以下组件:
import React, {Component} from 'react';
import Highcharts from 'highcharts/js/highcharts';
export default class Chart extends Component {
state = {
chartOptions: {
// my chart options and data
}
}
componentDidMount() {
if(this.props.extendFunc) {
import('highcharts/js/modules/funnel.src.js').then((funnelModule) => {
funnelModule(Highcharts)
})
}
Highchart.Chart('myChart', this.state.chartOptions)
}
render() {
<div id="myChart" />
}
}
我使用上面的组件两次。现在存在两个组件使用相同导入的行为,例如Highcharts的导入不会发生两次。我注意到了这一点,因为Highcharts提供了扩展功能的选项
import React, {Component} from 'react';
import Chart from './Chart';
export default class Dashboard extends Component {
render() {
return (
<div>
<Chart extendFunc={true}> Chart 1 </Chart>
<Chart> Chart 2 </Chart>
</div>
)
}
}
例如,如果我通过传递一个道具来扩展图表1的功能,那么Highcharts的功能也会在图表2中扩展,尽管我没有传递道具来扩展功能
import React, {Component} from 'react';
import Chart from './Chart';
export default class Dashboard extends Component {
render() {
return (
<div>
<Chart extendFunc={true}> Chart 1 </Chart>
<Chart> Chart 2 </Chart>
</div>
)
}
}
是什么导致了这种行为?这是react还是导入的工作方式?同一组件的多个实例的导入是全局的吗?或者,对于整个应用程序,节点模块的导入是否相同?使用prop extendFunc扩展时,它将在图表组件中扩展,而不是在新组件中扩展
这意味着,如果您调用该组件,它将始终具有您提供给它的道具,但如果没有按要求设置道具,则不必使用它们
是什么导致了这种行为?这是react还是导入的工作方式?同一组件的多个实例的导入是全局的吗?或者,对于整个应用程序,节点模块的导入是否相同
这就是导入的工作方式。当您第一次导入某些内容时,将运行该文件,并将从中导出的值返回到导入该文件的文件。当再次导入某些内容时,这些导出将被重用并返回
有时,这种行为是有帮助的,首先是为了提高性能,避免不必要地重新运行同一个文件,如果模块想要存储一些内部状态,也可以这样做。例如,计算从应用程序中任何位置调用函数的次数
在这种情况下,您需要为每个脚本创建一个实例,模块通常会为您提供一种实际创建该实例的方法。例如,我可能有一个日志模块,它导出一个Logger类,然后我可以为每个组件创建该类的新实例,并分别配置每个Logger
对于您的情况,请查看文档,看看是否有办法制作Highcharts的每个组件实例,并使用您需要的功能扩展单个实例。我不确定我们是否在谈论同样的事情。我想我提供了一个糟糕的例子,我使用了extendFunc,但没有在我的组件中使用它。我更新了我的示例。我的问题更多的是关于为什么我的两个组件都有一个扩展的功能,尽管我只是在一个组件中添加它;