Skip to Content
Docs⚛️ ReactState Management

State Management

Pe măsură ce aplicația crește, gestionarea state-ului devine mai complexă. Iată soluțiile de la simplu la avansat.

State local cu useState

Potrivit pentru date care aparțin unui singur component:

import { useState } from 'react' function Toggle() { const [isOpen, setIsOpen] = useState(false) return ( <button onClick={() => setIsOpen(prev => !prev)}> {isOpen ? 'Închide' : 'Deschide'} </button> ) }

Lifting State Up

Când două componente au nevoie de același state, mută-l în părintele comun:

function Parent() { const [count, setCount] = useState(0) return ( <> <Display count={count} /> <Controls onIncrement={() => setCount(c => c + 1)} /> </> ) } function Display({ count }) { return <p>Count: {count}</p> } function Controls({ onIncrement }) { return <button onClick={onIncrement}>+1</button> }

Context API

Pentru state care trebuie accesibil în toată aplicația (temă, utilizator autentificat etc.):

import { createContext, useContext, useState } from 'react' // 1. Creează contextul const ThemeContext = createContext('light') // 2. Furnizează contextul export function ThemeProvider({ children }) { const [theme, setTheme] = useState('light') return ( <ThemeContext.Provider value={{ theme, setTheme }}> {children} </ThemeContext.Provider> ) } // 3. Consumă contextul function ThemedButton() { const { theme, setTheme } = useContext(ThemeContext) return ( <button style={{ background: theme === 'light' ? '#fff' : '#333', color: theme === 'light' ? '#000' : '#fff' }} onClick={() => setTheme(theme === 'light' ? 'dark' : 'light')} > Tema curentă: {theme} </button> ) }

Context re-randează toți consumatorii când valoarea se schimbă. Pentru state complex și performanță, consideră Zustand sau Redux Toolkit.

useReducer

Alternativă la useState pentru logică de state mai complexă:

import { useReducer } from 'react' const initialState = { count: 0 } function reducer(state, action) { switch (action.type) { case 'increment': return { count: state.count + 1 } case 'decrement': return { count: state.count - 1 } case 'reset': return initialState default: throw new Error('Acțiune necunoscută: ' + action.type) } } export default function Counter() { const [state, dispatch] = useReducer(reducer, initialState) return ( <> <p>Count: {state.count}</p> <button onClick={() => dispatch({ type: 'increment' })}>+</button> <button onClick={() => dispatch({ type: 'decrement' })}>-</button> <button onClick={() => dispatch({ type: 'reset' })}>Reset</button> </> ) }
Last updated on