Lifted state moves state to the closest common ancestor so siblings can share it.
Code:
1// ❌ Siblings can't share state2function App() {3 return (4 <>5 <TemperatureInput /> // Has its own state6 <TemperatureDisplay /> // Can't access that state7 </>8 );9}1011// ✅ Lift state to common parent12function App() {13 const [temperature, setTemperature] = useState("");14 const [scale, setScale] = useState("celsius");1516 return (17 <>18 <TemperatureInput19 scale={scale}20 temperature={temperature}21 onTemperatureChange={setTemperature}22 />23 <TemperatureDisplay24 celsius={scale === "celsius" ? temperature : toCelsius(temperature)}25 />26 </>27 );28}2930function TemperatureInput({ scale, temperature, onTemperatureChange }) {31 return (32 <fieldset>33 <legend>Enter temperature in {scale}:</legend>34 <input35 value={temperature}36 onChange={(e) => onTemperatureChange(e.target.value)}37 />38 </fieldset>39 );40}4142function TemperatureDisplay({ celsius }) {43 return (44 <p>{celsius}°C = {toFahrenheit(celsius)}°F</p>45 );46}
Rules:
When to lift state:
vs Context: