Как передать this.data другим компонентам с помощью React и Axios - PullRequest
1 голос
/ 18 апреля 2019

Я выполняю настройку клиента и сервера (реакции и вызовы axios api) И я хотел бы понять, как получить доступ к возвращенным данным из моих дочерних компонентов в React Framework. У меня есть соединение, работающее с http-сервером, но мне не хватает базовых знаний по работе с this.state или props.

вот мой app.js

import React, { Component } from 'react';
import axios from 'axios';
import ChildComponent from "./components/childComponent"

class App extends Component {
 state = {
  data: [],
  intervalIsSet : false
};

  componentDidMount() {
    this.getDataFromDb();
    if (!this.state.intervalIsSet) {
      let interval = setInterval(this.getDataFromDb, 10000);
      this.setState({ intervalIsSet: interval });
    }
  }

  getDataFromDb = () => {
    fetch("http://localhost:3001/api/getData")
      .then(data => data.json())
      .then(res => this.setState({ data: res.data }));
  };

 render() {
    const { data } = this.state;
    return (
       <div>
         <childComponent />
       </div>

  );
};
}

export default App;

а вот и дочерний компонент. -> я хочу просто получить (или распечатать) мои возвращенные данные с сервера из дочернего компонента.

import React, {Component} из'act ';

class ChildComponent extends React.Component {
    render() {
      return (
            {this.props.data}
      );
    }
  }

  export default ChildComponent;

Ответы [ 2 ]

1 голос
/ 18 апреля 2019

Сначала убедитесь, что вы uppercase первая буква ChildComponent.Если вы хотите передать данные, вы должны добавить этот объект в качестве атрибута к component, а затем получить к нему доступ через this.props.Также вам нужно визуализировать один верхний элемент, и если вам не нужен div или любой другой элемент HTML, вы можете заключить его в React.Fragment.

Относительно data, если этомассив, вы можете просто map через него и вернуть данные, которые вы хотите видеть, если вы хотите, чтобы весь объект отображался в виде строки, вы можете использовать JSON.stringify().И если это object, вы можете показывать только те данные, которые вам нужны.

class App extends React.Component {
  //...
  render() {
    const { data } = this.state;
    return (
      <div>
        <ChildComponent data={data} />
      </div>
    );
  }
}

//for array, ex: data = ["first","name"];
class ChildComponent extends React.Component {
  render() {
    return (
      <React.Fragment>
        {this.props.data.map(item => 
          <p>{item}</p>
        )}
      </React.Fragment>
    );
  }
}

//for object, ex: data = {id: 1, name: 'John'};
class ChildComponent extends React.Component {
  render() {
    const {data} = this.props;

    return (
      <React.Fragment>
        <p>{data.id}</p>
        <p>{data.name}</p>
      </React.Fragment>
    );
  }
}

//for single value (string, int, etc), ex: data = "my name";
class ChildComponent extends React.Component {
  render() {
    return (
      <React.Fragment>
        <p>{this.props.data}</p>
      </React.Fragment>
    );
  }
}

//to show object as a string (could be any object mentioned before)
class ChildComponent extends React.Component {
  render() {
    return (
      <React.Fragment>
        {JSON.stringify(this.props.data)}
      </React.Fragment>
    );
  }
}
1 голос
/ 18 апреля 2019

Вы можете передать массив data как реквизит data дочернему компоненту.Также убедитесь, что вы вводите первый символ в имени компонента в верхнем регистре, иначе он не будет работать должным образом.

Компонент должен отображать один элемент верхнего уровня, так что вы можете, например, отобразить div с помощью JSON* * * * * data

class App extends React.Component {
  // ...

  render() {
    const { data } = this.state;
    return (
      <div>
        <ChildComponent data={data} />
      </div>
    );
  }
}

class ChildComponent extends React.Component {
  render() {
    return <div>{JSON.stringify(this.props.data)}</div>;
  }
}
* * * * * *.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...