React Lifting State

Lifting state up in React involves moving the state to the nearest common ancestor component so multiple child components can access and update that state. This allows data sharing across sibling components and simplifies state management.

1. Why Lift State Up?

React encourages moving state up to the closest common ancestor of components that need to share it. This pattern is essential for making sure all components remain in sync when they rely on shared data.

2. Example of Lifting State Up

Consider a scenario where you have two components, TemperatureInput and BoilingVerdict, and you want to calculate whether a temperature (in Celsius) would cause water to boil.

import React, { useState } from 'react';

function BoilingVerdict({ celsius }) {
    return <p>{celsius >= 100 ? 'The water would boil.' : 'The water would not boil.'}</p>;
}

function TemperatureInput({ temperature, onTemperatureChange }) {
    const handleChange = (event) => {
        onTemperatureChange(event.target.value);
    };

    return (
        <fieldset>
            <legend>Enter temperature in Celsius:</legend>
            <input value={temperature} onChange={handleChange} />
        </fieldset>
    );
}

function Calculator() {
    const [temperature, setTemperature] = useState('');

    return (
        <div>
            <TemperatureInput
                temperature={temperature}
                onTemperatureChange={setTemperature}
            />
            <BoilingVerdict celsius={parseFloat(temperature)} />
        </div>
    );
}

In this example, the Calculator component holds the state for temperature and passes it to both TemperatureInput and BoilingVerdict. This structure allows these sibling components to access and update the same state.

3. Breaking Down the Components

  • BoilingVerdict: Displays whether the water will boil based on the Celsius temperature passed as a prop.
  • TemperatureInput: Takes the temperature as a prop and updates it using the onTemperatureChange callback.
  • Calculator: Maintains the temperature state and provides it to both child components.

4. Using Callback Functions

In this pattern, Calculator passes a callback function, setTemperature, to TemperatureInput. When the input changes, this callback updates the state in Calculator, which in turn updates both TemperatureInput and BoilingVerdict with the latest data.

5. Summary

By lifting state up, you can centralize the data management for multiple components, allowing them to work with shared data and stay in sync. This technique helps maintain predictable state flow and ensures that your components are consistently up-to-date with shared data.

Note: We aim to make learning easier by sharing top-quality tutorials, but please remember that tutorials may not be 100% accurate, as occasional mistakes can happen. Once you've mastered the language, we highly recommend consulting the official documentation to stay updated with the latest changes. If you spot any errors, please feel free to report them to help us improve.

top-home