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

React JS中如何通过props传递App.js导入的data.json数据到组件

实现方案

你要的「App.js统一导入JSON后通过props向下传递」是React单向数据流最标准的写法之一,比各个组件各自导入JSON的可维护性高很多,具体实现如下,所有代码在Vite、Create React App搭建的默认React项目里都可以直接运行:

1. 准备测试JSON文件

把你的data.json放在src目录根路径即可,这里给一个示例结构参考:

// src/data.json
{
  "siteInfo": {
    "title": "React练习站点",
    "version": "1.0.0"
  },
  "userList": [
    {"id": 1, "name": "张三", "role": "管理员"},
    {"id": 2, "name": "李四", "role": "普通用户"}
  ],
  "postList": [
    {"id": 1, "title": "React入门第一步", "content": "掌握props传递逻辑"},
    {"id": 2, "title": "静态数据管理", "content": "统一入口导入更易维护"}
  ]
}

注:React官方脚手架默认支持JSON文件导入,不需要额外配置loader。

2. App.js统一导入并传递props

在根组件App里一次性导入JSON数据,再按照业务组件需要的数据字段,通过props分别向下传递:

// src/App.js
// 统一导入静态JSON数据
import siteData from './data.json';
// 导入业务组件
import Header from './components/Header';
import UserList from './components/UserList';
import PostList from './components/PostList';

function App() {
  return (
    <div className="app-container">
      {/* 按组件需要拆分传递对应数据 */}
      <Header siteInfo={siteData.siteInfo} />
      <UserList users={siteData.userList} />
      <PostList posts={siteData.postList} />
    </div>
  );
}

export default App;

3. 业务组件通过props接收数据使用

所有业务组件不需要单独导入data.json,直接从入参的props里取对应数据渲染即可:

// src/components/Header.jsx
export default function Header(props) {
  const { siteInfo } = props;
  return (
    <header className="site-header">
      <h1>{siteInfo.title}</h1>
      <span>当前版本:{siteInfo.version}</span>
    </header>
  )
}
// src/components/UserList.jsx
export default function UserList(props) {
  const { users } = props;
  return (
    <section className="user-section">
      <h2>用户列表</h2>
      <ul>
        {users.map(user => (
          <li key={user.id}>{user.name} - {user.role}</li>
        ))}
      </ul>
    </section>
  )
}
// src/components/PostList.jsx
export default function PostList(props) {
  const { posts } = props;
  return (
    <section className="post-section">
      <h2>文章列表</h2>
      <ul>
        {posts.map(post => (
          <li key={post.id}>
            <h3>{post.title}</h3>
            <p>{post.content}</p>
          </li>
        ))}
      </ul>
    </section>
  )
}

补充说明

网上很多教程直接在组件内导入JSON的写法,只适合完全固定、不会变更的常量场景。你选的统一入口导入+props传递的写法,后续如果要把静态JSON换成接口请求数据,只需要修改App.js里的数据获取逻辑,所有子组件不需要做任何改动,维护成本低很多,也更方便做组件单元测试。

内容的提问来源于stack exchange,提问作者Omkar Dhumal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 00:15:45