Как передать данные с одного компонента в другой в react?

Пользователь

от jaren , в категории: JavaScript , год назад

Как передать данные с одного компонента в другой в react?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от wilburn , год назад

@jaren 

В React данные можно передавать между компонентами используя props или состояние.

  1. Передача данных с помощью props: Props (сокращение от "properties") – это объект, содержащий свойства и значения, которые могут быть переданы между компонентами. Для передачи данных через props, нужно:
  • Определить свойства компонента (props) в компоненте-родителе и передать значения свойств в дочерний компонент с помощью атрибутов.
  • В компоненте-дочернем получить данные через props.


Пример:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
//Родительский компонент
import React from 'react';
import ChildComponent from './ChildComponent';

function ParentComponent() {
  const name = 'John';
  return (
    <div>
      <ChildComponent name={name} />
    </div>
  );
}

//Дочерний компонент
import React from 'react';

function ChildComponent(props) {
  return <p>Hello, {props.name}</p>;
}


  1. Передача данных с помощью состояния: Состояние (state) – это объект, содержащий данные, которые могут изменяться в компоненте. Для передачи данных через состояние, нужно:
  • Определить состояние в компоненте-родителе.
  • Определить функцию, которая изменяет состояние.
  • Передать функцию и значение состояния в дочерний компонент через props.


Пример:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
//Родительский компонент
import React, { useState } from 'react';
import ChildComponent from './ChildComponent';

function ParentComponent() {
  const [name, setName] = useState('John');
  return (
    <div>
      <ChildComponent name={name} setName={setName} />
    </div>
  );
}

//Дочерний компонент
import React from 'react';

function ChildComponent(props) {
  function handleChange(e) {
    props.setName(e.target.value);
  }

  return (
    <div>
      <p>Hello, {props.name}</p>
      <input type="text" value={props.name} onChange={handleChange} />
    </div>
  );
}


Здесь мы определяем состояние name в компоненте-родителе ParentComponent и передаем его значение и функцию setName в дочерний компонент ChildComponent. В дочернем компоненте мы отображаем значение name и вводим его в поле ввода. При изменении значения в поле ввода вызывается функция handleChange, которая изменяет состояние name с помощью функции setName.

Пользователь

от judd , 20 дней назад

@jaren 

Дополнительно к вышеперечисленному, в React также есть возможность использовать контекст (Context API) для передачи данных между компонентами без явной передачи через пропсы через каждый уровень вложенности. Контекст позволяет передавать данные глубоко в иерархии компонентов, обеспечивая доступ к этим данным во всех дочерних компонентах, не задействуя промежуточные компоненты.


Для использования контекста в React, необходимо создать и определить контекст с помощью функции createContext, передав в нее значение по умолчанию. Затем, определите компонент-поставщик (Provider) контекста, который будет оборачивать дочерние компоненты, и укажите значения для контекста. Наконец, используйте компонент-потребитель (Consumer) контекста или хук useContext в дочерних компонентах, чтобы получить доступ к данным контекста.


Пример использования контекста в React:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
// Создание контекста
const MyContext = React.createContext('default value');

// Родительский компонент-поставщик
function ParentComponent() {
  const data = 'information';

  return (
    <MyContext.Provider value={data}>
      <ChildComponent />
    </MyContext.Provider>
  );
}

// Дочерний компонент-потребитель
function ChildComponent() {
  return (
    <MyContext.Consumer>
      {value => <p>Data from context: {value}</p>}
    </MyContext.Consumer>
  );
}


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


Контекст предоставляет удобный способ для передачи данных, когда указанные решения с пропсами или состоянием могут быть неудобными из-за глубокой вложенности компонентов или необходимости передавать одни и те же данные в множество компонентов.