You need to enable JavaScript to run this app. 如何将React组件内的state对象共享给其他React文件的组件
优惠活动
大模型
产品
解决方案
定价
更多

如何将React组件内的state对象共享给其他React文件的组件

React类组件跨组件获取state数据的实现方案

以下是适配你现有代码结构的可直接落地的实现方案,按组件关系场景选择即可:

方案1:Db为Filler的父组件(直接通过props传递)

这是成本最低的实现方式,直接在Db组件的render方法中渲染Filler组件,将state中的Data作为props传入即可。

修改后的Db.js代码

import React, { Component } from "react";
import axios from "axios";
import Layout from "./Layout";
import Filler from "./Filler"; // 引入Filler组件

class Db extends Component {
  constructor() {
    super();
    this.state = {
      Data: [],
    };
  }

  componentDidMount() {
    axios.get(`https://breakingbadapi.com/api/characters`).then((res) => {
      const data = res.data;
      this.setState({ Data: data });
    });
  }

  render() {
    return (
      <div>
        <h1>DB working</h1>
        {/* 把state中的Data通过props传给Filler */}
        <Filler listData={this.state.Data} />
      </div>
    );
  }
}

export default Db;

修改后的Filler.js代码

import React, { Component } from "react";

class Filler extends Component {
  constructor(props) {
    // 必须传入props才能在构造函数中访问传入的参数
    super(props);
  }

  render() {
    // 直接通过this.props.listData获取Db传来的数据
    const { listData } = this.props;
    return (
      <div>
        {/* 示例:渲染数据长度,可根据业务需求修改渲染逻辑 */}
        <p>获取到的角色数量:{listData.length}</p>
      </div>
    );
  }
}

export default Filler;

方案2:两个组件为平级/无直接父子关系(状态提升)

如果Db和Filler是同级组件,就把共享的Data状态和API请求逻辑提升到它们的共同父组件中,再分别传给两个子组件。
示例共同父组件App.js代码:

import React, { Component } from "react";
import axios from "axios";
import Db from "./Db";
import Filler from "./Filler";

class App extends Component {
  constructor() {
    super();
    this.state = {
      Data: [],
    };
  }

  componentDidMount() {
    axios.get(`https://breakingbadapi.com/api/characters`).then((res) => {
      const data = res.data;
      this.setState({ Data: data });
    });
  }

  render() {
    return (
      <div>
        <Db Data={this.state.Data} />
        <Filler listData={this.state.Data} />
      </div>
    )
  }
}

export default App;

对应的Db组件可以删掉自身的state和API请求逻辑,直接接收props使用即可。

方案3:组件层级较深(使用React Context API)

如果两个组件间隔很多层级,props透传太繁琐,可以用React内置的Context API做全局状态共享,无需引入第三方状态管理库。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 02:54:04