diff --git a/src/content/learn/sharing-state-between-components.md b/src/content/learn/sharing-state-between-components.md
index 0dcf53148..38daef309 100644
--- a/src/content/learn/sharing-state-between-components.md
+++ b/src/content/learn/sharing-state-between-components.md
@@ -1,31 +1,38 @@
---
-title: Sharing State Between Components
+title: Condividere lo State tra i Componenti
+translationStatus: ai-draft
---
+
+
+Questa pagina è stata tradotta automaticamente e supervisionata da un maintainer. Un'ulteriore revisione da parte della community sarebbe comunque utile. [Migliora questa traduzione](https://github.com/reactjs/it.react.dev/edit/main/src/content/learn/sharing-state-between-components.md).
+
+
+
-Sometimes, you want the state of two components to always change together. To do it, remove state from both of them, move it to their closest common parent, and then pass it down to them via props. This is known as *lifting state up,* and it's one of the most common things you will do writing React code.
+A volte, vuoi che lo state di due componenti cambi sempre insieme. Per farlo, rimuovi lo state da entrambi, spostalo al loro genitore comune più vicino e poi passalo loro tramite le props. Questo è noto come *alzare lo state* ed è una delle cose più comuni che farai scrivendo codice React.
-- How to share state between components by lifting it up
-- What are controlled and uncontrolled components
+- Come condividere lo state tra componenti alzandolo
+- Cosa sono i componenti controllati e non controllati
-## Lifting state up by example {/*lifting-state-up-by-example*/}
+## Alzare lo state con un esempio {/*lifting-state-up-by-example*/}
-In this example, a parent `Accordion` component renders two separate `Panel`s:
+In questo esempio, un componente genitore `Accordion` renderizza due `Panel` separati:
* `Accordion`
- `Panel`
- `Panel`
-Each `Panel` component has a boolean `isActive` state that determines whether its content is visible.
+Ogni componente `Panel` ha una variabile di state booleana `isActive` che determina se il suo contenuto è visibile.
-Press the Show button for both panels:
+Premi il pulsante Mostra per entrambi i pannelli:
@@ -41,7 +48,7 @@ function Panel({ title, children }) {
{children}
) : (
)}
@@ -73,59 +80,59 @@ h3, p { margin: 5px 0px; }
-Notice how pressing one panel's button does not affect the other panel--they are independent.
+Nota come premere il pulsante di un pannello non influisce sull'altro pannello: sono indipendenti.
-
+
-Initially, each `Panel`'s `isActive` state is `false`, so they both appear collapsed
+Inizialmente, lo state `isActive` di ciascun `Panel` è `false`, quindi entrambi appaiono collassati
-
+
-Clicking either `Panel`'s button will only update that `Panel`'s `isActive` state alone
+Cliccare il pulsante di uno dei `Panel` aggiornerà solo lo state `isActive` di quel `Panel`
-**But now let's say you want to change it so that only one panel is expanded at any given time.** With that design, expanding the second panel should collapse the first one. How would you do that?
+**Ma ora diciamo che vuoi cambiarlo in modo che solo un pannello sia espanso in qualsiasi momento.** Con questo design, espandere il secondo pannello dovrebbe collassare il primo. Come faresti?
-To coordinate these two panels, you need to "lift their state up" to a parent component in three steps:
+Per coordinare questi due pannelli, devi "alzare il loro state" a un componente genitore in tre passaggi:
-1. **Remove** state from the child components.
-2. **Pass** hardcoded data from the common parent.
-3. **Add** state to the common parent and pass it down together with the event handlers.
+1. **Rimuovi** lo state dai componenti figli.
+2. **Passa** dati hardcodati dal genitore comune.
+3. **Aggiungi** lo state al genitore comune e passalo ai figli insieme ai gestori di eventi.
-This will allow the `Accordion` component to coordinate both `Panel`s and only expand one at a time.
+Questo permetterà al componente `Accordion` di coordinare entrambi i `Panel` ed espanderne solo uno alla volta.
-### Step 1: Remove state from the child components {/*step-1-remove-state-from-the-child-components*/}
+### Passaggio 1: Rimuovi lo state dai componenti figli {/*step-1-remove-state-from-the-child-components*/}
-You will give control of the `Panel`'s `isActive` to its parent component. This means that the parent component will pass `isActive` to `Panel` as a prop instead. Start by **removing this line** from the `Panel` component:
+Darai il controllo di `isActive` del `Panel` al suo componente genitore. Questo significa che il componente genitore passerà `isActive` a `Panel` come prop. Inizia **rimuovendo questa riga** dal componente `Panel`:
```js
const [isActive, setIsActive] = useState(false);
```
-And instead, add `isActive` to the `Panel`'s list of props:
+E invece, aggiungi `isActive` all'elenco delle props di `Panel`:
```js
function Panel({ title, children, isActive }) {
```
-Now the `Panel`'s parent component can *control* `isActive` by [passing it down as a prop.](/learn/passing-props-to-a-component) Conversely, the `Panel` component now has *no control* over the value of `isActive`--it's now up to the parent component!
+Ora il componente genitore di `Panel` può *controllare* `isActive` [passandolo come prop.](/learn/passing-props-to-a-component) Al contrario, il componente `Panel` ora *non ha controllo* sul valore di `isActive`: spetta al componente genitore!
-### Step 2: Pass hardcoded data from the common parent {/*step-2-pass-hardcoded-data-from-the-common-parent*/}
+### Passaggio 2: Passa dati hardcodati dal genitore comune {/*step-2-pass-hardcoded-data-from-the-common-parent*/}
-To lift state up, you must locate the closest common parent component of *both* of the child components that you want to coordinate:
+Per alzare lo state, devi individuare il genitore comune più vicino di *entrambi* i componenti figli che vuoi coordinare:
-* `Accordion` *(closest common parent)*
+* `Accordion` *(genitore comune più vicino)*
- `Panel`
- `Panel`
-In this example, it's the `Accordion` component. Since it's above both panels and can control their props, it will become the "source of truth" for which panel is currently active. Make the `Accordion` component pass a hardcoded value of `isActive` (for example, `true`) to both panels:
+In questo esempio, è il componente `Accordion`. Poiché si trova sopra entrambi i pannelli e può controllare le loro props, diventerà la "fonte di verità" per quale pannello è attualmente attivo. Fai in modo che il componente `Accordion` passi un valore hardcodato di `isActive` (ad esempio, `true`) a entrambi i pannelli:
@@ -154,7 +161,7 @@ function Panel({ title, children, isActive }) {
{children}
) : (
)}
@@ -172,21 +179,21 @@ h3, p { margin: 5px 0px; }
-Try editing the hardcoded `isActive` values in the `Accordion` component and see the result on the screen.
+Prova a modificare i valori hardcodati di `isActive` nel componente `Accordion` e osserva il risultato sullo schermo.
-### Step 3: Add state to the common parent {/*step-3-add-state-to-the-common-parent*/}
+### Passaggio 3: Aggiungi lo state al genitore comune {/*step-3-add-state-to-the-common-parent*/}
-Lifting state up often changes the nature of what you're storing as state.
+Alzare lo state spesso cambia la natura di ciò che memorizzi come state.
-In this case, only one panel should be active at a time. This means that the `Accordion` common parent component needs to keep track of *which* panel is the active one. Instead of a `boolean` value, it could use a number as the index of the active `Panel` for the state variable:
+In questo caso, solo un pannello dovrebbe essere attivo alla volta. Questo significa che il componente genitore comune `Accordion` deve tenere traccia di *quale* pannello è quello attivo. Invece di un valore `boolean`, potrebbe usare un numero come indice del `Panel` attivo per la variabile di state:
```js
const [activeIndex, setActiveIndex] = useState(0);
```
-When the `activeIndex` is `0`, the first panel is active, and when it's `1`, it's the second one.
+Quando `activeIndex` è `0`, il primo pannello è attivo, e quando è `1`, lo è il secondo.
-Clicking the "Show" button in either `Panel` needs to change the active index in `Accordion`. A `Panel` can't set the `activeIndex` state directly because it's defined inside the `Accordion`. The `Accordion` component needs to *explicitly allow* the `Panel` component to change its state by [passing an event handler down as a prop](/learn/responding-to-events#passing-event-handlers-as-props):
+Cliccare il pulsante "Mostra" in uno dei `Panel` deve cambiare l'indice attivo in `Accordion`. Un `Panel` non può impostare direttamente lo state `activeIndex` perché è definito dentro `Accordion`. Il componente `Accordion` deve *consentire esplicitamente* al componente `Panel` di cambiare il suo state [passando un gestore di eventi come prop](/learn/responding-to-events#passing-event-handlers-as-props):
```js
<>
@@ -205,7 +212,7 @@ Clicking the "Show" button in either `Panel` needs to change the active index in
>
```
-The `