diff --git a/src/content/learn/updating-arrays-in-state.md b/src/content/learn/updating-arrays-in-state.md index 61e4f4e2d..6984e133c 100644 --- a/src/content/learn/updating-arrays-in-state.md +++ b/src/content/learn/updating-arrays-in-state.md @@ -1,52 +1,52 @@ --- -title: Updating Arrays in State +title: Оновлення масивів у стані --- -Arrays are mutable in JavaScript, but you should treat them as immutable when you store them in state. Just like with objects, when you want to update an array stored in state, you need to create a new one (or make a copy of an existing one), and then set state to use the new array. +У JavaScript масиви є змінними, але потрібно розглядати їх як незмінні під час зберігання у стані. Як і з об'єктами, коли вам потрібно оновити масив, що зберігається в стані, слід створити новий (або зробити копію наявного), а потім використати цей новий масив під час задання стану. -- How to add, remove, or change items in an array in React state -- How to update an object inside of an array -- How to make array copying less repetitive with Immer +- Як додавати, видаляти або змінювати елементи масиву в стані React +- Як оновити об'єкт всередині масиву +- Як зробити копіювання масиву менш повторюваним за допомогою Immer -## Updating arrays without mutation {/*updating-arrays-without-mutation*/} +## Оновлення масивів без мутації {/*updating-arrays-without-mutation*/} -In JavaScript, arrays are just another kind of object. [Like with objects](/learn/updating-objects-in-state), **you should treat arrays in React state as read-only.** This means that you shouldn't reassign items inside an array like `arr[0] = 'bird'`, and you also shouldn't use methods that mutate the array, such as `push()` and `pop()`. +У JavaScript масиви — це ще один вид об'єктів. [Як і з об'єктами](/learn/updating-objects-in-state), **потрібно розглядати масиви в стані React як доступні лише для читання.** Це означає, що не слід повторно присвоювати значення елементам усередині масиву, наприклад, `arr[0] = 'bird'`, а також використовувати методи, які мутують масив, як-от `push()` і `pop()`. -Instead, every time you want to update an array, you'll want to pass a *new* array to your state setting function. To do that, you can create a new array from the original array in your state by calling its non-mutating methods like `filter()` and `map()`. Then you can set your state to the resulting new array. +Натомість кожного разу, коли хочете оновити масив, потрібно передати *новий* масив у функцію задання стану. Щоб зробити це, ви можете створити новий масив із вихідного у вашому стані, викликавши його немутаційні методи, як-от `filter()` і `map()`. Потім можете задати стан для нового отриманого масиву. -Here is a reference table of common array operations. When dealing with arrays inside React state, you will need to avoid the methods in the left column, and instead prefer the methods in the right column: +Ось довідкова таблиця загальних операцій із масивами. Маючи справу з масивами всередині стану React, вам потрібно буде уникати методів у лівій колонці, а натомість віддавати перевагу методам у правій: -| | avoid (mutates the array) | prefer (returns a new array) | +| | уникати (змінює масив) | віддати перевагу (повертає новий масив) | | --------- | ----------------------------------- | ------------------------------------------------------------------- | -| adding | `push`, `unshift` | `concat`, `[...arr]` spread syntax ([example](#adding-to-an-array)) | -| removing | `pop`, `shift`, `splice` | `filter`, `slice` ([example](#removing-from-an-array)) | -| replacing | `splice`, `arr[i] = ...` assignment | `map` ([example](#replacing-items-in-an-array)) | -| sorting | `reverse`, `sort` | copy the array first ([example](#making-other-changes-to-an-array)) | +| додавання | `push`, `unshift` | `concat`, spread-синтаксис `[...arr]` ([приклад](#adding-to-an-array)) | +| видалення | `pop`, `shift`, `splice` | `filter`, `slice` ([приклад](#removing-from-an-array)) | +| заміна | `splice`, `arr[i] = ...` присвоєння | `map` ([приклад](#replacing-items-in-an-array)) | +| сортування | `reverse`, `sort` | спочатку скопіюйте масив ([приклад](#making-other-changes-to-an-array)) | -Alternatively, you can [use Immer](#write-concise-update-logic-with-immer) which lets you use methods from both columns. +Крім того, ви можете [скористатися Immer](#write-concise-update-logic-with-immer), що дозволить використовувати методи з обох стовпців. -Unfortunately, [`slice`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice) and [`splice`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice) are named similarly but are very different: +На жаль, [`slice`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice) та [`splice`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice) мають схожі назви, але дуже відрізняються: -* `slice` lets you copy an array or a part of it. -* `splice` **mutates** the array (to insert or delete items). +* `slice` дозволяє копіювати масив або його частину. +* `splice` **змінює** масив (для вставлення або видалення елементів). -In React, you will be using `slice` (no `p`!) a lot more often because you don't want to mutate objects or arrays in state. [Updating Objects](/learn/updating-objects-in-state) explains what mutation is and why it's not recommended for state. +У React ви будете використовувати `slice` (без `p`!) набагато частіше, тому що не потрібно мутувати об'єкти чи масиви в стані. [Оновлення об'єктів](/learn/updating-objects-in-state) пояснює, що таке мутація та чому вона не рекомендована для стану. -### Adding to an array {/*adding-to-an-array*/} +### Додавання до масиву {/*adding-to-an-array*/} -`push()` will mutate an array, which you don't want: +`push()` змінить масив, що вам не потрібно: @@ -61,7 +61,7 @@ export default function List() { return ( <> -

Inspiring sculptors:

+

Скульптори, які надихають:

setName(e.target.value)} @@ -71,7 +71,7 @@ export default function List() { id: nextId++, name: name, }); - }}>Add + }}>Додати