Что такое Prop Drilling в React

Ответ

Prop Drilling — это передача пропсов через несколько уровней компонентов, когда промежуточные компоненты не используют эти данные, а просто передают их дальше. Это может усложнить поддержку кода.

Пример:

// Компонент-родитель
const Parent = () => {
  const [user, setUser] = useState('John');
  return <Child user={user} />;
};

// Промежуточный компонент (не использует user)
const Child = ({ user }) => {
  return <Grandchild user={user} />;
};

// Компонент, которому нужны данные
const Grandchild = ({ user }) => {
  return <div>{user}</div>;
};

Решение проблемы:

  • Использовать Context API
  • Применять state-менеджеры (Redux, MobX)
  • Компонентный composition (передача детей через children)

Ответ 18+ 🔞

Да ты посмотри на эту дичь! Сидит себе программист, пишет компоненты, а они как матрёшки, только вместо красоты — сплошной пиздец. Это ж надо, данные тащить через всю иерархию, как воду в решете!

Смотри, вот тебе классика жанра, про которую даже Тургенев с его Герасимом бы ахуел. Есть у нас Parent, хранит какую-то хуйню, ну, user там.

// Компонент-родитель
const Parent = () => {
  const [user, setUser] = useState('John');
  return <Child user={user} />;
};

Дальше — Child. А этот, сука, вообще манда с ушами! Ему эти данные нахуй не сдались, но он их получает и, не глядя, пихает дальше, в Grandchild.

// Промежуточный компонент (не использует user)
const Child = ({ user }) => {
  return <Grandchild user={user} />;
};

И вот, наконец, Grandchild, который, блядь, один во всём этом цирке эти данные реально использует!

// Компонент, которому нужны данные
const Grandchild = ({ user }) => {
  return <div>{user}</div>;
};

Представляешь масштаб? Это как если бы тебе из кухни нужно было передать соль в спальню, но ты сначала суёшь её соседу, потом почтальону, потом коту, и только потом она доходит до цели. А все промежуточные звенья орут: «Нахуя мне эта соль?!»

И терпения ебать ноль поддерживать эту хуйню! Захотел переименовать пропс — иди по всей цепочке и везде меняй, блядь. Один пропустил — всё, пизда приложению.

Но выход есть, ёпта! Не надо быть таким Герасимом, который всё топит.

Можно взять Context API — это как глобальная доска объявлений. Положил данные туда, и любой компонент, даже самый глубокий, может их оттуда выковырять, минуя всех этих бесполезных посредников.

Можно притащить state-менеджеры вроде Redux или MobX. Это уже целые штабы управления состоянием, где всё лежит в одном предсказуемом месте. Никакого прокидывания, просто подключайся и бери что надо.

А самый элегантный способ, хитрая жопа, — компонентный composition. Вместо того чтобы пихать данные, ты пихаешь сразу готовые куски интерфейса (через children или слоты). Промежуточным компонентам вообще похуй, что у тебя внутри, они просто рендерят то, что им передали. Красота, блядь!

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