Javascript 在道具中传递数据是否会复制该数据?

Javascript 在道具中传递数据是否会复制该数据?,javascript,reactjs,Javascript,Reactjs,我正在React中构建一个仪表板,目前我正在考虑构建一个小按钮组件,允许用户将图表中的数据作为CSV文件下载。大概是这样的: // Dashboard render(){ const data=makeLargeDataset(); // make an array with 1m rows return ( <DownloadCSV data={data} /> ); } // Download Button onClick(){ if (this.pro

我正在React中构建一个仪表板,目前我正在考虑构建一个小按钮组件,允许用户将图表中的数据作为CSV文件下载。大概是这样的:

// Dashboard
render(){
  const data=makeLargeDataset(); // make an array with 1m rows
  return (
    <DownloadCSV data={data} />
  );
}

// Download Button
onClick(){
  if (this.props.data){
    convertAndDownload(this.props.data);
  }
}
//仪表板
render(){
const data=makeLargeDataset();//创建一个包含1m行的数组
返回(
);
}
//下载按钮
onClick(){
如果(此.props.data){
convertAndDownload(this.props.data);
}
}

当传递到按钮的道具时,是否会复制1M行?如果我必须让道具穿过几层,它会继续复制吗?是否有一种更聪明的方法来传递道具——或者通常使用大型变量和数组——这样就不会浪费或低效?

您不是在传递数据副本,而是在传递引用


您可以考虑以某种方式对数据进行分页,以便处理较小的数组。

您不是在传递数据副本,而是在传递引用

您可以考虑以某种方式对数据进行分页,以便处理较小大小的阵列。

不,事实并非如此

从高阶组件传递到子组件的任何道具始终引用相同的道具。它被称为真理的单一来源。您可以更改HO组件中的一个数据点,并按照名称指示进行反应,只对更改进行反应,而不对其他内容进行反应

保存这些大数据集的一个简单方法是使用像
Redux
这样的存储来保证数据的安全,但更聪明的方法是根据您的需要创建一个API或微服务并调用它,而不是在浏览器上加载一百万行。

不,它没有

从高阶组件传递到子组件的任何道具始终引用相同的道具。它被称为真理的单一来源。您可以更改HO组件中的一个数据点,并按照名称指示进行反应,只对更改进行反应,而不对其他内容进行反应


保存这些大数据集的一个简单方法是使用像
Redux
这样的存储来保证数据的安全,但更聪明的方法是根据您的需要创建一个API或微服务并调用它,而不是在浏览器上加载一百万行。

Duplicate?您正在传递一个引用。检查的简单方法是尝试更改其中一个较低层中的数据,并查看它是否未反映在顶层。如果没有反射,则元素不相同。我希望它们是一样的。通过道具传递数据不会复制数据。。。这更像是将数据的副本传递给另一个组件…@DAMMAK“不重复…”和“传递副本…”似乎截然相反。你正在传递数据的引用。好的。。。事实上,这是正确的!!!复制品?您正在传递一个引用。检查的简单方法是尝试更改其中一个较低层中的数据,并查看它是否未反映在顶层。如果没有反射,则元素不相同。我希望它们是一样的。通过道具传递数据不会复制数据。。。这更像是将数据的副本传递给另一个组件…@DAMMAK“不重复…”和“传递副本…”似乎截然相反。你正在传递数据的引用。好的。。。事实上,这是正确的!!!如果我不谈论高阶组件,你的反应会改变吗?关于服务,你是对的。我实际上并没有存储一百万行,这只是一个极端,可以让人理解这一点。但我担心的是如何降低内存使用率,等等。不,我还是更喜欢使用一个单独的API,这样当我需要更改样式或插入某些内容时,我会在该端点执行此操作,而不会更改前端。如果我不谈论高阶组件,您的响应是否会发生变化?关于服务,你是对的。我实际上并没有存储一百万行,这只是一个极端,可以让人理解这一点。但我担心的是如何降低内存使用率,等等。不,我还是更喜欢使用一个单独的API,这样当我需要更改样式或插入某些内容时,我会在该端点处这样做,而不会更改前端。