You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在React.js应用中加载多个data.js数据文件?

Loading Multiple Data Files in Your React App

Hey there! Loading multiple data files like dataCPU.js, dataGPU.js, etc., into your React app is totally manageable—here are two clean, scalable approaches that fit with your current code setup:

Approach 1: Import and Merge Files Directly in App.js

If you want a quick start, you can import each data file individually and merge their products arrays right in your App component:

Updated App.js

import Header from './components/Header';
import Main from './components/Main';
import Builder from './components/Builder';
import { useState } from 'react';
// Import all your data files here
import dataRAM from './dataRAM';
import dataCPU from './dataCPU';
import dataGPU from './dataGPU';
import dataMotherboard from './dataMotherboard';
// Add the rest of your 7 data files here

function App() {
  // Merge all products into a single array
  const products = [
    ...dataRAM.products,
    ...dataCPU.products,
    ...dataGPU.products,
    ...dataMotherboard.products,
    // Include products from other data files here
  ];

  const [builderItems, setBuilderItems] = useState([]);

  // Keep your existing onAdd and onRemove functions the same
  const onAdd = (product) => {
    const exist = builderItems.find(x => x._id === product._id);
    if(exist){
      setBuilderItems(
        builderItems.map(x => x._id === product._id ? {...exist, qty: exist.qty+1} : x )
      );
    }else{
      setBuilderItems([...builderItems, {...product, qty: 1}])
    }
  }

  const onRemove = (product) => {
    const exist = builderItems.find((x) => x._id === product._id);
    if(exist.qty === 1) {
      setBuilderItems(builderItems.filter((x) => x._id !== product._id));
    } else{
      setBuilderItems(
        builderItems.map(x => x._id === product._id ? {...exist, qty: exist.qty-1} : x )
      );
    }
  }

  return (
    <div className="App">
      <Header countBuilderItems={builderItems.length}></Header>
      <div className = "row">
        <Main onAdd={onAdd} products={products}>
        </Main>
        <Builder onAdd={onAdd} onRemove={onRemove} builderItems = {builderItems} ></Builder>
      </div>
    </div>
  );
}

export default App;

Note: Make sure every product across all data files has a unique _id (e.g., prefix CPU products with cpu- instead of just 1, like cpu-1, cpu-2). This prevents conflicts in your cart/builder logic.

Approach 2: Create a Central Data Hub (Better for Scalability)

If you want a more maintainable setup (especially with 7+ files), create a central file to import and organize all your data. This way, you only need to update one file when adding new data sources.

Step 1: Create data/index.js

// Import all your data files
import dataRAM from './dataRAM';
import dataCPU from './dataCPU';
import dataGPU from './dataGPU';
// Add the rest of your data files here

// Export merged products for global use
export const allProducts = [
  ...dataRAM.products,
  ...dataCPU.products,
  ...dataGPU.products,
  // Include other product arrays here
];

// Optional: Export individual categories if you want to filter products later
export const ramProducts = dataRAM.products;
export const cpuProducts = dataCPU.products;
export const gpuProducts = dataGPU.products;

Step 2: Update App.js to Use the Central Hub

import Header from './components/Header';
import Main from './components/Main';
import Builder from './components/Builder';
import { useState } from 'react';
// Import from your central data file
import { allProducts } from './data';

function App() {
  const products = allProducts;
  const [builderItems, setBuilderItems] = useState([]);

  // Keep your existing onAdd/onRemove functions unchanged

  return (
    <div className="App">
      <Header countBuilderItems={builderItems.length}></Header>
      <div className = "row">
        <Main onAdd={onAdd} products={products}>
        </Main>
        <Builder onAdd={onAdd} onRemove={onRemove} builderItems = {builderItems} ></Builder>
      </div>
    </div>
  );
}

export default App;

Bonus: Filter by Category (If Needed)

If you want to let users switch between CPU/GPU/RAM views, use the category exports from data/index.js:

import { ramProducts, cpuProducts, gpuProducts } from './data';
import { useState } from 'react';

function App() {
  const [activeCategory, setActiveCategory] = useState('ram');
  
  const products = {
    ram: ramProducts,
    cpu: cpuProducts,
    gpu: gpuProducts
  }[activeCategory];

  return (
    <div className="App">
      <Header countBuilderItems={builderItems.length}></Header>
      {/* Add category toggle buttons */}
      <div className="category-buttons">
        <button onClick={() => setActiveCategory('ram')}>RAM</button>
        <button onClick={() => setActiveCategory('cpu')}>CPU</button>
        <button onClick={() => setActiveCategory('gpu')}>GPU</button>
      </div>
      <div className = "row">
        <Main onAdd={onAdd} products={products}></Main>
        <Builder onAdd={onAdd} onRemove={onRemove} builderItems={builderItems}></Builder>
      </div>
    </div>
  );
}

Either approach works—go with the first if you need a quick fix, or the second if you want to keep your codebase clean as you add more data files.

内容的提问来源于stack exchange,提问作者James Craig

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 04:27:58