首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将ajax数据向下传递到react中的组件

如何将ajax数据向下传递到react中的组件
EN

Stack Overflow用户
提问于 2017-01-12 09:20:37
回答 1查看 1.3K关注 0票数 1

我正在学习react,并且有一个应用程序用来处理存储在javascript对象中的静态数据。我现在使用axios通过ajax加载数据。

这是可行的,我目前将数据存储在应用程序的状态中,然后在数据加载后将其向下传递给组件,但我将数据作为道具传递给每个组件的方式感觉不正确。

每个组件如何在不将数据作为道具传递给每个组件的情况下访问父应用程序的数据?

这是我的代码

代码语言:javascript
复制
    class App extends Component {

  constructor(props) {
    super(props);
    this.state = {appData: {}};
  }

  componentDidMount() {
    axios.get('/data/appData.json')
    .then((result)=> {
      const thisData = result.data;
      this.setState({
        appData: result.data
      });
    })
  }

  componentWillUnmount() {
    this.serverRequest.abort();
  }

  render() {

    const theData = this.state.appData;
    if (Object.keys(theData).length > 0 && theData.constructor === Object){ //if the object is not empty
      return (
        <div className="App">
          <AppHeader appData={theData} />
          <AppMenu appData={theData} />
          <MainCarousel appData={theData} />
          <HomeDetails appData={theData} />
          <Model3D appData={theData} />
          <AppMaps appData={theData} />
          <AppContact appData={theData} />
        </div>
      );
    } else {
      return (
        <div className="App"></div>
      )
    }

  }
}

使用数据的组件如下所示:

代码语言:javascript
复制
function AppHeader(props) {
  return (
    <div className="App-header">
      <h2 className="App-title">{props.appData.copy.title}</h2>
      <h4 className="App-subtitle">{props.appData.copy.subtitle}</h4>
    </div>
  );
}

对于函数,或

代码语言:javascript
复制
class MainCarousel extends Component {
  mixins: [Carousel.ControllerMixin];

  constructor(props) {
    super(props);
  }

  render() {
    const carouselItems = this.props.appData.carouselItems.map((carouselItem) =>
      <AppCarouselItem key={carouselItem.name.toLowerCase()} name={carouselItem.name} image={carouselItem.image} />
    );
    return (
      <div className="App-carousel">
        <Carousel autoplay={true} wrapAround={true}>
          {carouselItems}
        </Carousel>
      </div>
    );
  }
}

为了一堂课。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-12 09:52:00

出于您的目的,您正在做的事情是完全可以接受的,我唯一要更改的是将状态拆分成每个组件的对象。这将阻止每个组件在您每次更新其中一个组件时进行更新。

当你的子组件更新父组件的状态时,事情会变得混乱。这就是像FluxRedux这样的库派上用场的地方。

如果你只是用静态数据创建一个简单的应用程序,那就把状态作为道具发送给你的组件。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41603606

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档