Подъём состояния — это техника в React, при которой состояние перемещается из дочерних компонентов в их общего родителя. Это позволяет нескольким компонентам совместно использовать и управлять одним и тем же состоянием. Подъём состояния необходим, когда несколько компонентов должны отображать одни и те же данные или когда дочерние компоненты должны взаимодействовать друг с другом.
Основные причины подъёма состояния:
Подъём состояния — одна из фундаментальных концепций React, которая помогает управлять состоянием приложения на уровне родительских компонентов. Эта техника позволяет создавать более предсказуемый и поддерживаемый код.
Подъём состояния необходим в следующих случаях:
Когда несколько компонентов нуждаются в одних и тех же данных:
// Родительский компонент с поднятым состоянием
function App() {
const [count, setCount] = useState(0);
return (
<div>
<CounterDisplay count={count} />
<CounterButton onClick={() => setCount(count + 1)} />
</div>
);
}Когда дочерние компоненты должны взаимодействовать:
// Родитель управляет состоянием обоих дочерних компонентов
function Form() {
const [name, setName] = useState('');
const [email, setEmail] = useState('');
return (
<form>
<NameInput value={name} onChange={setName} />
<EmailInput value={email} onChange={setEmail} />
</form>
);
}// Без подъёма состояния - компоненты не синхронизированы
function BadExample() {
return (
<div>
<Counter />
<Counter />
</div>
);
}
// С подъёмом состояния - синхронизированное состояние
function GoodExample() {
const [count, setCount] = useState(0);
return (
<div>
<Counter count={count} setCount={setCount} />
<Counter count={count} setCount={setCount} />
</div>
);
}function UserForm() {
const [userData, setUserData] = useState({
name: '',
email: '',
age: ''
});
// Все поля формы управляются из одного состояния
}// ❌ Подъём состояния, когда это не нужно
function Parent() {
const [child1State, setChild1State] = useState('');
const [child2State, setChild2State] = useState('');
return (
<div>
<Child1 state={child1State} setState={setChild1State} />
<Child2 state={child2State} setState={setChild2State} />
</div>
);
}
// ✅ Состояние остаётся в дочерних компонентах
function Parent() {
return (
<div>
<Child1 />
<Child2 />
</div>
);
}// ❌ Подъём всего состояния дочернего компонента
function Parent() {
const [childState, setChildState] = useState({
localData: '',
localPreference: '',
localUIState: false
});
return <Child state={childState} setState={setChildState} />;
}
// ✅ Только необходимое состояние поднимается
function Parent() {
const [sharedData, setSharedData] = useState('');
return <Child sharedData={sharedData} setSharedData={setSharedData} />;
}Подъём состояния — это стандартная практика React, которая работает во всех версиях библиотеки.
Подъём состояния — важная техника для создания предсказуемого и поддерживаемого React-приложения, позволяющая эффективно управлять общим состоянием нескольких компонентов.
В чём разница между этими двумя подходами и какой предпочтительнее?
// Подход 1: Состояние в дочерних компонентах
function Parent() {
return (
<div>
<Input1 />
<Input2 />
<SubmitButton />
</div>
);
}
// Подход 2: Подъём состояния
function Parent() {
const [value1, setValue1] = useState('');
const [value2, setValue2] = useState('');
return (
<div>
<Input1 value={value1} onChange={setValue1} />
<Input2 value={value2} onChange={setValue2} />
<SubmitButton
onSubmit={() => console.log({ value1, value2 })}
/>
</div>
);
}Ответ: Подход 2 (с подъёмом состояния) предпочтительнее.
Объяснение:
Подход 1 (без подъёма):
Подход 2 (с подъёмом состояния):
Когда использовать каждый подход:
Подъём состояния особенно важен при работе с формами, фильтрами, сортировкой и другими сценариями, где несколько компонентов должны работать с общими данными.
Хотите больше статей для подготовки к собеседованиям? Подписывайтесь на EasyAdvice, добавляйте сайт в закладки и совершенствуйтесь каждый день 💪