React.JS - передача данных от одного компонента к другому

Отказ от ответственности: я новичок в "React.JS".

Я пытаюсь получить значение от одного компонента, поэтому я могу использовать его в другом компоненте для отображения соответствующего содержимого. Компонент 1 перечисляет все шоу из моей базы данных. Компонент 2 имеет информацию о каждом конкретном шоу на отдельной странице. Я хочу сделать это без жесткого кодирования, так как это можно охарактеризовать как не очень хороший подход.

Вот код:

Component1.JSX

import React, { Component } from 'react';
import './SecondPage.css';
import { Button, ButtonGroup, DropdownItem, DropdownMenu, DropdownToggle, ButtonDropdown } from 'reactstrap';
import Helmet from 'react-helmet';
import axios from 'axios';
import { Link } from 'react-router-dom';
import Showing from '../Showing/Showing.jsx';


class SecondPage extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      showingsList: [],
    };

    this.handleSubmit = this.handleSubmit.bind(this);
  }

  componentDidMount(){
    const self = this;
    axios.get('/api/loadShowings')
    .then(response => {
      var  showingsList  = response.data
   this.setState({ showingsList });

  }
    );

  }

  handleSubmit(){

  }

  render(){
    return(
      <div class = "grid-container1">
      {
        this.state.showingsList.map((showing) => {
          return <div showing = {showing} key = {showing.id}>
            <div class = "grid-item1 "><img width = "200px" height = "200px" src = {showing.image}/>
            <h3>{showing.title}</h3>
            <h5>{showing.description}</h5>
            <Link to = "/Showing">
            <Button  className = "btnShowings">MORE</Button>
            </Link>
        </div>







          </div>})
      }
      </div>
    )
  }
}

export default SecondPage;

Component2.JSX

import React, {Component} from 'react';
import './Showing.css';
import Helmet from 'react-helmet';
import {Button} from 'reactstrap';
import {Link} from 'react-router-dom';
import axios from 'axios';

class Showing extends React.Component{
    constructor(props) {
        super(props);
        this.state = {
          showingsList: [], 
        };

      }

      componentDidMount(){
        const self = this;
        axios.get('/api/loadShowings')
        .then(response => {
          var  showingsList  = response.data
       this.setState({ showingsList });
       console.info(showingsList["0"].title)


      }
        );

      }

    render(){
        return(
<div>

      {
        this.state.showingsList.map((showing) => {
          return <div showing = {showing} key = {showing.id}>


          <Helmet>
          <style>{'body { background-color: gray; }'}</style>
          </Helmet>


            <div class = "grid-container">
            <div class = "item1">{showing.title}</div>
            <div class = "item2"><img width = "200px" height = "200px" src = {showing.image}/></div>
            <div class = "item3">{showing.description}</div>  
            <div class = "item4"> <a href = "/Booking">
                    <Button bsStyle = "info" size = "lg">Make a booking</Button>
                    </a></div>

            </div>



          </div>})
      }

            </div>
        )
    }
}

export default Showing;

Я попробовал пару вещей, которые видел из различных руководств - используя this.props.state, но не смог заставить его работать, так как пример был сделан на основном файле JSX (App.js). Я также пробовал делать аксиомный пост и получать, но это становится настолько сложным. Я прошу совета, что использовать, поэтому мне не нужно создавать много разных страниц для каждого случая. Большое тебе спасибо!

Почему у вас есть два отдельных компонента? У них, наверное, разные цели? Итак, у вас есть несколько вариантов. Component1 может отображать Component2, поэтому вы можете передать ему свойство состояния showingLists. Или вы можете поднять свое состояние, в родительском компоненте вы выбираете шоу, устанавливаете свое состояние и передаете его обоим компонентам.

devserkan 28.11.2018 21:32

Это отличная идея, но в будущем мне также понадобится Компонент 3. Могу ли я иметь ребенка, если я сделаю это таким образом?

Gergan Zhekov 28.11.2018 21:35

В каком именно направлении? Практическое правило: если все эти компоненты будут использовать / совместно использовать одно и то же состояние (showingLists), просто создайте компонент-контейнер и выполните в нем операцию выборки. Затем визуализируйте свои компоненты в этом контейнере и передайте им состояние. . Несколько хороших ссылок для вас. Состояние подъема вверх и Контейнерные / Презентационные компоненты (Дан Абрамов) И, может быть, Контекстный API

devserkan 28.11.2018 21:42

Хорошо, сделаю это. Большое тебе спасибо!

Gergan Zhekov 28.11.2018 21:45
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
4
722
0

Другие вопросы по теме