`:](/reference/react/Fragment#rendering-a-list-of-fragments)
```js
import { Fragment } from 'react';
@@ -393,46 +393,45 @@ const listItems = people.map(person =>
);
```
-Fragments disappear from the DOM, so this will produce a flat list of ``, `
`, `
`, `
`, and so on.
+Fragmenty nie pojawiają się w drzewie DOM, więc użycie ich spowoduje uzyskanie płaskiej listy elementów `
`, `
`, `
`, `
` i tak dalej.
-### Where to get your `key` {/*where-to-get-your-key*/}
+### Skąd wziąć klucze `key` {/*where-to-get-your-key*/}
-Different sources of data provide different sources of keys:
+Różne źródła danych dostarczają różnych kluczy:
-* **Data from a database:** If your data is coming from a database, you can use the database keys/IDs, which are unique by nature.
-* **Locally generated data:** If your data is generated and persisted locally (e.g. notes in a note-taking app), use an incrementing counter, [`crypto.randomUUID()`](https://developer.mozilla.org/en-US/docs/Web/API/Crypto/randomUUID) or a package like [`uuid`](https://www.npmjs.com/package/uuid) when creating items.
+* **Dane z bazy danych:** Jeśli twoje dane pochodzą z bazy danych, możesz używać kluczy lub ID z tej bazy danych, które z natury są unikalne.
+* **Lokalnie generowane dane:** Jeśli twoje dane są generowane i przechowywane lokalnie (np. notatki w aplikacji do robienia notatek), użyj licznika przyrostowego [`crypto.randomUUID()`](https://developer.mozilla.org/en-US/docs/Web/API/Crypto/randomUUID) lub paczki takiej jak [`uuid`](https://www.npmjs.com/package/uuid) podczas tworzenia elementów.
+### Zasady kluczy {/*rules-of-keys*/}
-### Rules of keys {/*rules-of-keys*/}
+* **Klucze muszą być unikalne między rodzeństwem.** Jednakże używanie tych samych kluczy dla węzłów JSX w _różnych_ tablicach jest jak najbardziej w porządku.
+* **Klucze nie mogą się zmieniać,** bo to przeczy ich celowi! Nie generuj ich podczas renderowania.
-* **Keys must be unique among siblings.** However, it’s okay to use the same keys for JSX nodes in _different_ arrays.
-* **Keys must not change** or that defeats their purpose! Don't generate them while rendering.
+### Dlaczego React potrzebuje kluczy? {/*why-does-react-need-keys*/}
-### Why does React need keys? {/*why-does-react-need-keys*/}
+Wyobraź sobie, że pliki na twoim pulpicie nie mają nazw. Zamiast tego trzeba odwoływać się do nich przez ich kolejność - pierwszy plik, drugi plik i tak dalej. Można się do tego przyzwyczaić, ale gdyby usunąć plik, zaczęłoby być to kłopotliwe. Drugi plik stałby się pierwszym plikiem, trzeci plik byłby drugim plikiem i tak dalej.
-Imagine that files on your desktop didn't have names. Instead, you'd refer to them by their order -- the first file, the second file, and so on. You could get used to it, but once you delete a file, it would get confusing. The second file would become the first file, the third file would be the second file, and so on.
-
-File names in a folder and JSX keys in an array serve a similar purpose. They let us uniquely identify an item between its siblings. A well-chosen key provides more information than the position within the array. Even if the _position_ changes due to reordering, the `key` lets React identify the item throughout its lifetime.
+Nazwy plików w folderze i klucze JSX w tablicy pełnią podobną rolę. Pozwalają nam jednoznacznie identyfikować element pośród swojego rodzeństwa. Dobrze dobrany klucz dostarcza więcej informacji niż pozycja w tablicy. Nawet jeśli _pozycja_ zmieni się ze względu na ponowne sortowanie, klucz pozwala Reactowi identyfikować element przez cały cykl jego życia.
-You might be tempted to use an item's index in the array as its key. In fact, that's what React will use if you don't specify a `key` at all. But the order in which you render items will change over time if an item is inserted, deleted, or if the array gets reordered. Index as a key often leads to subtle and confusing bugs.
+Możesz skusić się, aby użyć indeksu elementu w tablicy jako jego klucza. W rzeczywistości to właśnie jego użyje React, jeśli w ogóle nie określisz klucza. Jednak kolejność renderowania elementów będzie się zmieniać w miarę czasu, gdy jakiś element zostanie dodany, usunięty lub jeśli tablica zostanie posortowana. Indeks jako klucz często prowadzi do mało oczywistych i mylących błędów.
-Similarly, do not generate keys on the fly, e.g. with `key={Math.random()}`. This will cause keys to never match up between renders, leading to all your components and DOM being recreated every time. Not only is this slow, but it will also lose any user input inside the list items. Instead, use a stable ID based on the data.
+Podobnie nie generuj kluczy dynamicznie, na przykład za pomocą `key={Math.random()}`. Spowoduje to, że klucze nigdy nie będą się zgadzać między renderowaniami, co poskutkuje za każdym razem tworzeniem od nowa wszystkich komponentów i drzewa DOM. Nie tylko będzie to wolne, ale również sprawi, że utracisz wszystkie dane wprowadzone przez użytkownika wewnątrz elementów listy. Zamiast tego użyj stałego identyfikatora opartego na danych.
-Note that your components won't receive `key` as a prop. It's only used as a hint by React itself. If your component needs an ID, you have to pass it as a separate prop: ``.
+Zauważ, że twoje komponenty nie otrzymają `key` przez właściwości. Jest on używany jedynie jako wskazówka dla samego Reacta. Jeśli twój komponent potrzebuje identyfikatora, musisz przekazać go jako oddzielną właściwość: ``.
-On this page you learned:
+Na tej stronie nauczyliśmy cię:
-* How to move data out of components and into data structures like arrays and objects.
-* How to generate sets of similar components with JavaScript's `map()`.
-* How to create arrays of filtered items with JavaScript's `filter()`.
-* Why and how to set `key` on each component in a collection so React can keep track of each of them even if their position or data changes.
+* Jak przenieść dane z komponentów do struktur danych, takich jak tablice i obiekty.
+* Jak generować zbiory podobnych komponentów za pomocą javascriptowej funkcji `map()`.
+* Jak tworzyć tablice przefiltrowanych elementów za pomocą javascriptowej funkcji `filter()`.
+* Jak i dlaczego ustawiać klucz `key` dla każdego komponentu w kolekcji, aby React mógł śledzić każdy z nich, nawet jeśli zmienią się ich pozycja lub dane.
@@ -440,11 +439,11 @@ On this page you learned:
-#### Splitting a list in two {/*splitting-a-list-in-two*/}
+#### Dzielenie listy na dwie {/*splitting-a-list-in-two*/}
-This example shows a list of all people.
+Ten przykład wyświetla listę wszystkich osób.
-Change it to show two separate lists one after another: **Chemists** and **Everyone Else.** Like previously, you can determine whether a person is a chemist by checking if `person.profession === 'chemist'`.
+Zmień go tak, aby pokazywał dwie oddzielne listy jedna po drugiej: **Chemia** i **Wszyscy Inni.** Tak jak wcześniej, możesz określić, czy osoba jest związana z chemią, sprawdzając warunek `person.profession === 'chemist'`.
@@ -462,13 +461,13 @@ export default function List() {
{person.name}:
{' ' + person.profession + ' '}
- known for {person.accomplishment}
+ {person.accomplishment}.
);
return (
- Scientists
+ Naukowcy
);
@@ -479,32 +478,32 @@ export default function List() {
export const people = [{
id: 0,
name: 'Creola Katherine Johnson',
- profession: 'mathematician',
- accomplishment: 'spaceflight calculations',
+ profession: 'matematyczka',
+ accomplishment: 'znana z obliczeń związanych z lotami kosmicznymi',
imageId: 'MK3eW3A'
}, {
id: 1,
name: 'Mario José Molina-Pasquel Henríquez',
- profession: 'chemist',
- accomplishment: 'discovery of Arctic ozone hole',
+ profession: 'chemik',
+ accomplishment: 'znany z odkrycia dziury ozonowej nad Arktyką',
imageId: 'mynHUSa'
}, {
id: 2,
name: 'Mohammad Abdus Salam',
- profession: 'physicist',
- accomplishment: 'electromagnetism theory',
+ profession: 'fizyk',
+ accomplishment: 'znany z prac nad teorią elektromagnetyzmu',
imageId: 'bE7W1ji'
}, {
id: 3,
name: 'Percy Lavon Julian',
- profession: 'chemist',
- accomplishment: 'pioneering cortisone drugs, steroids and birth control pills',
+ profession: 'chemik',
+ accomplishment: 'znany z pionierskich prac nad lekami na bazie kortyzonu, steroidami i pigułkami antykoncepcyjnymi',
imageId: 'IOjWm71'
}, {
id: 4,
name: 'Subrahmanyan Chandrasekhar',
- profession: 'astrophysicist',
- accomplishment: 'white dwarf star mass calculations',
+ profession: 'astrofizyk',
+ accomplishment: 'znany z obliczeń masy białych karłów',
imageId: 'lrWQx8l'
}];
```
@@ -535,7 +534,7 @@ img { width: 100px; height: 100px; border-radius: 50%; }
-You could use `filter()` twice, creating two separate arrays, and then `map` over both of them:
+Możesz użyć funkcji `filter()` dwukrotnie, tworząc dwie osobne tablice, a następnie użyć funkcji `map()` dla obu z nich:
@@ -545,15 +544,15 @@ import { getImageUrl } from './utils.js';
export default function List() {
const chemists = people.filter(person =>
- person.profession === 'chemist'
+ person.profession === 'chemik'
);
const everyoneElse = people.filter(person =>
- person.profession !== 'chemist'
+ person.profession !== 'chemik'
);
return (
- Scientists
- Chemists
+ Naukowcy
+ Chemicy
- Everyone Else
+ Wszyscy inni
-In this solution, the `map` calls are placed directly inline into the parent `` elements, but you could introduce variables for them if you find that more readable.
+W rozwiązaniu tym, wywołania funkcji `map()` są umieszczone bezpośrednio wewnątrz elementów nadrzędnych ``, ale możesz przenieść je do zmiennych, aby zwiększyć czytelność.
-There is still a bit duplication between the rendered lists. You can go further and extract the repetitive parts into a `` component:
+Nadal zachodzi tu duplikacja kodu między listami. Możesz pójść dalej i wyodrębnić jego powtarzające się części do komponentu ``:
@@ -672,7 +671,7 @@ function ListSection({ title, people }) {
{person.name}:
{' ' + person.profession + ' '}
- known for {person.accomplishment}
+ {person.accomplishment}.
)}
@@ -683,20 +682,20 @@ function ListSection({ title, people }) {
export default function List() {
const chemists = people.filter(person =>
- person.profession === 'chemist'
+ person.profession === 'chemik'
);
const everyoneElse = people.filter(person =>
- person.profession !== 'chemist'
+ person.profession !== 'chemik'
);
return (
- Scientists
+ Naukowcy
@@ -708,32 +707,32 @@ export default function List() {
export const people = [{
id: 0,
name: 'Creola Katherine Johnson',
- profession: 'mathematician',
- accomplishment: 'spaceflight calculations',
+ profession: 'matematyczka',
+ accomplishment: 'znana z obliczeń związanych z lotami kosmicznymi',
imageId: 'MK3eW3A'
}, {
id: 1,
name: 'Mario José Molina-Pasquel Henríquez',
- profession: 'chemist',
- accomplishment: 'discovery of Arctic ozone hole',
+ profession: 'chemik',
+ accomplishment: 'znany z odkrycia dziury ozonowej nad Arktyką',
imageId: 'mynHUSa'
}, {
id: 2,
name: 'Mohammad Abdus Salam',
- profession: 'physicist',
- accomplishment: 'electromagnetism theory',
+ profession: 'fizyk',
+ accomplishment: 'znany z prac nad teorią elektromagnetyzmu',
imageId: 'bE7W1ji'
}, {
id: 3,
name: 'Percy Lavon Julian',
- profession: 'chemist',
- accomplishment: 'pioneering cortisone drugs, steroids and birth control pills',
+ profession: 'chemik',
+ accomplishment: 'znany z pionierskich prac nad lekami na bazie kortyzonu, steroidami i pigułkami antykoncepcyjnymi',
imageId: 'IOjWm71'
}, {
id: 4,
name: 'Subrahmanyan Chandrasekhar',
- profession: 'astrophysicist',
- accomplishment: 'white dwarf star mass calculations',
+ profession: 'astrofizyk',
+ accomplishment: 'znany z obliczeń masy białych karłów',
imageId: 'lrWQx8l'
}];
```
@@ -762,9 +761,9 @@ img { width: 100px; height: 100px; border-radius: 50%; }
-A very attentive reader might notice that with two `filter` calls, we check each person's profession twice. Checking a property is very fast, so in this example it's fine. If your logic was more expensive than that, you could replace the `filter` calls with a loop that manually constructs the arrays and checks each person once.
+Bardzo uważny czytelnik może zauważyć, że przy dwóch wywołaniach funkcji `filter()`, zawód każdej osoby jest sprawdzany dwukrotnie. W tym przykładzie, sprawdzanie właściwości jest bardzo szybkie, więc jest to akceptowalne rozwiązanie. Jeśli jednak twoja logika byłaby bardziej kosztowna, można by zastąpić wywołania funkcji `filter()` pętlą, która ręcznie konstruuje tablice i sprawdza każdą osobę tylko raz.
-In fact, if `people` never change, you could move this code out of your component. From React's perspective, all that matters is that you give it an array of JSX nodes in the end. It doesn't care how you produce that array:
+W zasadzie, jeśli tablica `people` nigdy się nie zmienia, możesz przenieść ten kod poza komponent. Z punktu widzenia Reacta, ważne jest tylko to, aby ostatecznie dostarczyć mu tablicę węzłów JSX. Nie ma to znaczenia, w jaki sposób generujesz tę tablicę:
@@ -775,7 +774,7 @@ import { getImageUrl } from './utils.js';
let chemists = [];
let everyoneElse = [];
people.forEach(person => {
- if (person.profession === 'chemist') {
+ if (person.profession === 'chemik') {
chemists.push(person);
} else {
everyoneElse.push(person);
@@ -796,7 +795,7 @@ function ListSection({ title, people }) {
{person.name}:
{' ' + person.profession + ' '}
- known for {person.accomplishment}
+ {person.accomplishment}.
)}
@@ -808,13 +807,13 @@ function ListSection({ title, people }) {
export default function List() {
return (
- Scientists
+ Naukowcy
@@ -826,32 +825,32 @@ export default function List() {
export const people = [{
id: 0,
name: 'Creola Katherine Johnson',
- profession: 'mathematician',
- accomplishment: 'spaceflight calculations',
+ profession: 'matematyczka',
+ accomplishment: 'znana z obliczeń związanych z lotami kosmicznymi',
imageId: 'MK3eW3A'
}, {
id: 1,
name: 'Mario José Molina-Pasquel Henríquez',
- profession: 'chemist',
- accomplishment: 'discovery of Arctic ozone hole',
+ profession: 'chemik',
+ accomplishment: 'znany z odkrycia dziury ozonowej nad Arktyką',
imageId: 'mynHUSa'
}, {
id: 2,
name: 'Mohammad Abdus Salam',
- profession: 'physicist',
- accomplishment: 'electromagnetism theory',
+ profession: 'fizyk',
+ accomplishment: 'znany z prac nad teorią elektromagnetyzmu',
imageId: 'bE7W1ji'
}, {
id: 3,
name: 'Percy Lavon Julian',
- profession: 'chemist',
- accomplishment: 'pioneering cortisone drugs, steroids and birth control pills',
+ profession: 'chemik',
+ accomplishment: 'znany z pionierskich prac nad lekami na bazie kortyzonu, steroidami i pigułkami antykoncepcyjnymi',
imageId: 'IOjWm71'
}, {
id: 4,
name: 'Subrahmanyan Chandrasekhar',
- profession: 'astrophysicist',
- accomplishment: 'white dwarf star mass calculations',
+ profession: 'astrofizyk',
+ accomplishment: 'znany z obliczeń masy białych karłów',
imageId: 'lrWQx8l'
}];
```
@@ -882,13 +881,13 @@ img { width: 100px; height: 100px; border-radius: 50%; }
-#### Nested lists in one component {/*nested-lists-in-one-component*/}
+#### Listy zagnieżdżone w jednym komponencie {/*nested-lists-in-one-component*/}
-Make a list of recipes from this array! For each recipe in the array, display its name as an `` and list its ingredients in a ``.
+Stwórz listę przepisów z tej tablicy! Dla każdego przepisu z tablicy wyświetl jego nazwę jako `` i wypisz składniki w ``.
-This will require nesting two different `map` calls.
+Będzie to wymagało zagnieżdżenia dwóch różnych wywołań funkcji `map()`.
@@ -900,7 +899,7 @@ import { recipes } from './data.js';
export default function RecipeList() {
return (
-
Recipes
+ Przepisy
);
}
@@ -909,16 +908,16 @@ export default function RecipeList() {
```js src/data.js
export const recipes = [{
id: 'greek-salad',
- name: 'Greek Salad',
- ingredients: ['tomatoes', 'cucumber', 'onion', 'olives', 'feta']
+ name: 'Sałatka grecka',
+ ingredients: ['pomidory', 'ogórek', 'cebula', 'oliwki', 'feta']
}, {
id: 'hawaiian-pizza',
- name: 'Hawaiian Pizza',
- ingredients: ['pizza crust', 'pizza sauce', 'mozzarella', 'ham', 'pineapple']
+ name: 'Pizza hawajska',
+ ingredients: ['ciasto na pizze', 'sos do pizzy', 'mozzarella', 'szynka', 'ananas']
}, {
id: 'hummus',
- name: 'Hummus',
- ingredients: ['chickpeas', 'olive oil', 'garlic cloves', 'lemon', 'tahini']
+ name: 'Humus',
+ ingredients: ['ciecierzyca', 'oliwa z oliwek', 'ząbki czosnku', 'cytryna', 'tahini']
}];
```
@@ -926,7 +925,7 @@ export const recipes = [{
-Here is one way you could go about it:
+Oto jedna z możliwości, jak można to zrealizować:
@@ -936,7 +935,7 @@ import { recipes } from './data.js';
export default function RecipeList() {
return (
-
Recipes
+
Przepisy
{recipes.map(recipe =>
{recipe.name}
@@ -957,28 +956,28 @@ export default function RecipeList() {
```js src/data.js
export const recipes = [{
id: 'greek-salad',
- name: 'Greek Salad',
- ingredients: ['tomatoes', 'cucumber', 'onion', 'olives', 'feta']
+ name: 'Sałatka grecka',
+ ingredients: ['pomidory', 'ogórek', 'cebula', 'oliwki', 'feta']
}, {
id: 'hawaiian-pizza',
- name: 'Hawaiian Pizza',
- ingredients: ['pizza crust', 'pizza sauce', 'mozzarella', 'ham', 'pineapple']
+ name: 'Pizza hawajska',
+ ingredients: ['ciasto na pizze', 'sos do pizzy', 'mozzarella', 'szynka', 'ananas']
}, {
id: 'hummus',
- name: 'Hummus',
- ingredients: ['chickpeas', 'olive oil', 'garlic cloves', 'lemon', 'tahini']
+ name: 'Humus',
+ ingredients: ['ciecierzyca', 'oliwa z oliwek', 'ząbki czosnku', 'cytryna', 'tahini']
}];
```
-Each of the `recipes` already includes an `id` field, so that's what the outer loop uses for its `key`. There is no ID you could use to loop over ingredients. However, it's reasonable to assume that the same ingredient won't be listed twice within the same recipe, so its name can serve as a `key`. Alternatively, you could change the data structure to add IDs, or use index as a `key` (with the caveat that you can't safely reorder ingredients).
+Każdy z przepisów zawiera już pole `id`, więc właśnie to pole jest używane jako `key` w zewnętrznej pętli. Brak jest jednak identyfikatora, którego można by użyć do iteracji po składnikach. Niemniej jednak, można założyć, że ten sam składnik nie będzie wymieniony dwukrotnie w ramach tego samego przepisu, więc jego nazwa może posłużyć jako `key`. Ewentualnie, można by zmienić strukturę danych, dodając identyfikatory lub użyć indeksu jako `key` (z zastrzeżeniem, że nie można bezpiecznie zmieniać kolejności składników).
-#### Extracting a list item component {/*extracting-a-list-item-component*/}
+#### Wyodrębnianie komponentu elementu listy {/*extracting-a-list-item-component*/}
-This `RecipeList` component contains two nested `map` calls. To simplify it, extract a `Recipe` component from it which will accept `id`, `name`, and `ingredients` props. Where do you place the outer `key` and why?
+Komponent `RecipeList` zawiera dwa zagnieżdżone wywołania funkcji `map()`. Aby to uprościć, wyodrębnij komponent `Recipe`, który będzie przyjmować właściwości `id`, `name` oraz `ingredients`. Gdzie umieścisz zewnętrzny klucz `key` i dlaczego?
@@ -988,7 +987,7 @@ import { recipes } from './data.js';
export default function RecipeList() {
return (
-
Recipes
+
Przepisy
{recipes.map(recipe =>
{recipe.name}
@@ -1009,16 +1008,16 @@ export default function RecipeList() {
```js src/data.js
export const recipes = [{
id: 'greek-salad',
- name: 'Greek Salad',
- ingredients: ['tomatoes', 'cucumber', 'onion', 'olives', 'feta']
+ name: 'Sałatka grecka',
+ ingredients: ['pomidory', 'ogórek', 'cebula', 'oliwki', 'feta']
}, {
id: 'hawaiian-pizza',
- name: 'Hawaiian Pizza',
- ingredients: ['pizza crust', 'pizza sauce', 'mozzarella', 'ham', 'pineapple']
+ name: 'Pizza hawajska',
+ ingredients: ['ciasto na pizze', 'sos do pizzy', 'mozzarella', 'szynka', 'ananas']
}, {
id: 'hummus',
- name: 'Hummus',
- ingredients: ['chickpeas', 'olive oil', 'garlic cloves', 'lemon', 'tahini']
+ name: 'Humus',
+ ingredients: ['ciecierzyca', 'oliwa z oliwek', 'ząbki czosnku', 'cytryna', 'tahini']
}];
```
@@ -1026,7 +1025,7 @@ export const recipes = [{
-You can copy-paste the JSX from the outer `map` into a new `Recipe` component and return that JSX. Then you can change `recipe.name` to `name`, `recipe.id` to `id`, and so on, and pass them as props to the `Recipe`:
+Możesz przenieść JSX z zewnętrznego wywołania funkcji `map()` do nowego komponentu `Recipe` i zwrócić ten JSX. Następnie możesz zmienić `recipe.name` na `name`, `recipe.id` na `id` itd., a następnie przekazać je jako właściwości do komponentu `Recipe`:
@@ -1051,7 +1050,7 @@ function Recipe({ id, name, ingredients }) {
export default function RecipeList() {
return (
-
Recipes
+
Przepisy
{recipes.map(recipe =>
)}
@@ -1063,51 +1062,51 @@ export default function RecipeList() {
```js src/data.js
export const recipes = [{
id: 'greek-salad',
- name: 'Greek Salad',
- ingredients: ['tomatoes', 'cucumber', 'onion', 'olives', 'feta']
+ name: 'Sałatka grecka',
+ ingredients: ['pomidory', 'ogórek', 'cebula', 'oliwki', 'feta']
}, {
id: 'hawaiian-pizza',
- name: 'Hawaiian Pizza',
- ingredients: ['pizza crust', 'pizza sauce', 'mozzarella', 'ham', 'pineapple']
+ name: 'Pizza hawajska',
+ ingredients: ['ciasto na pizze', 'sos do pizzy', 'mozzarella', 'szynka', 'ananas']
}, {
id: 'hummus',
- name: 'Hummus',
- ingredients: ['chickpeas', 'olive oil', 'garlic cloves', 'lemon', 'tahini']
+ name: 'Humus',
+ ingredients: ['ciecierzyca', 'oliwa z oliwek', 'ząbki czosnku', 'cytryna', 'tahini']
}];
```
-Here, `
` is a syntax shortcut saying "pass all properties of the `recipe` object as props to the `Recipe` component". You could also write each prop explicitly: `
`.
+Użyta tutaj składnia `
` to skrócony zapis, mówiący "przekaż wszystkie właściwości obiektu `recipe` jako właściwości do komponentu `Recipe`". Możesz także przekazać każdą właściwość jawnie: `
`.
-**Note that the `key` is specified on the `
` itself rather than on the root `` returned from `Recipe`.** This is because this `key` is needed directly within the context of the surrounding array. Previously, you had an array of `
`s so each of them needed a `key`, but now you have an array of `
`s. In other words, when you extract a component, don't forget to leave the `key` outside the JSX you copy and paste.
+**Zauważ, że klucz `key` jest określony bezpośrednio dla ``, a nie dla najwyższego elementu ``, który jest zwracany przez `Recipe`.** To dlatego, że `key` jest potrzebny bezpośrednio w kontekście otaczającej tablicy. Wcześniej mieliśmy tablicę elementów `
`, więc każdy z nich potrzebował `key`, ale teraz mamy tablicę komponentów `
`. Innymi słowy, podczas wyodrębniania komponentu, nie zapomnij umieścić `key` poza kodem JSX, który przenosisz.
-#### List with a separator {/*list-with-a-separator*/}
+#### Lista z separatorem {/*list-with-a-separator*/}
-This example renders a famous haiku by Tachibana Hokushi, with each line wrapped in a `` tag. Your job is to insert an `
` separator between each paragraph. Your resulting structure should look like this:
+W tym przykładzie renderowany jest znany haiku autorstwa Tachibana Hokushi, z każdą linią umieszczoną w tagu ``. Twoim zadaniem jest wstawienie separatora `
` między każdym akapitem. Ostateczna struktura powinna wyglądać tak:
```js
- I write, erase, rewrite
+ Piszę, wymazuję, przepisuję
- Erase again, and then
+ Znowu wymazuję, a wtedy
- A poppy blooms.
+ Mak zakwita.
```
-A haiku only contains three lines, but your solution should work with any number of lines. Note that `
` elements only appear *between* the `` elements, not in the beginning or the end!
+Haiku zawiera tylko trzy linie, ale twoje rozwiązanie powinno działać dla dowolnej liczby linii. Zauważ, że elementy `
` pojawiają się tylko *pomiędzy* elementami `` , nie na początku czy na końcu!
```js
const poem = {
lines: [
- 'I write, erase, rewrite',
- 'Erase again, and then',
- 'A poppy blooms.'
+ 'Piszę, wymazuję, przepisuję',
+ 'Znowu wymazuję, a wtedy',
+ 'Mak zakwita.'
]
};
@@ -1141,33 +1140,33 @@ hr {
-(This is a rare case where index as a key is acceptable because a poem's lines will never reorder.)
+To rzadki przypadek, w którym indeks użyty jako klucz jest akceptowalny, ponieważ linie wiersza nigdy nie zmienią kolejności.
-You'll either need to convert `map` to a manual loop, or use a Fragment.
+Będziesz musieć albo przekształcić wywołanie funkcji `map()` w pętlę manualną, albo użyć Fragmentu.
-You can write a manual loop, inserting `
` and `...
` into the output array as you go:
+Możesz napisać pętlę manualną, dodając `
` i `...
` do tablicy wynikowej w miarę postępu:
```js
const poem = {
lines: [
- 'I write, erase, rewrite',
- 'Erase again, and then',
- 'A poppy blooms.'
+ 'Piszę, wymazuję, przepisuję',
+ 'Znowu wymazuję, a wtedy',
+ 'Mak zakwita.'
]
};
export default function Poem() {
let output = [];
- // Fill the output array
+ // Uzupełnij tablicę wynikową
poem.lines.forEach((line, i) => {
output.push(
@@ -1178,7 +1177,7 @@ export default function Poem() {
);
});
- // Remove the first
+ // Usuń pierwszy element
output.shift();
return (
@@ -1206,9 +1205,9 @@ hr {
-Using the original line index as a `key` doesn't work anymore because each separator and paragraph are now in the same array. However, you can give each of them a distinct key using a suffix, e.g. `key={i + '-text'}`.
+Wykorzystanie oryginalnego indeksu linii jako `key` już nie zadziała, ponieważ każdy separator i akapit znajdują się teraz w tej samej tablicy. Niemniej jednak możesz nadać każdemu z nich odrębny klucz, dodając sufiks, np. `key={i + '-text'}`.
-Alternatively, you could render a collection of Fragments which contain `
` and `...
`. However, the `<>...>` shorthand syntax doesn't support passing keys, so you'd have to write `` explicitly:
+Ewentualnie, możesz wyrenderować kolekcję Fragmentów, które zawierają `
` i `...
`. Jednak skrócona składnia `<>...>` nie wspiera przekazywania kluczy, więc musisz użyć składni ``:
@@ -1217,9 +1216,9 @@ import { Fragment } from 'react';
const poem = {
lines: [
- 'I write, erase, rewrite',
- 'Erase again, and then',
- 'A poppy blooms.'
+ 'Piszę, wymazuję, przepisuję',
+ 'Znowu wymazuję, a wtedy',
+ 'Mak zakwita.'
]
};
@@ -1254,7 +1253,7 @@ hr {
-Remember, Fragments (often written as `<> >`) let you group JSX nodes without adding extra ``s!
+Pamiętaj, że Fragmenty (często zapisywane jako `<> >`) pozwalają grupować węzły JSX bez dodawania elementów `
`!
diff --git a/src/sidebarLearn.json b/src/sidebarLearn.json
index 9ca411010..5fb0aecdc 100644
--- a/src/sidebarLearn.json
+++ b/src/sidebarLearn.json
@@ -80,7 +80,7 @@
"path": "/learn/conditional-rendering"
},
{
- "title": "Rendering Lists",
+ "title": "Renderowanie list",
"path": "/learn/rendering-lists"
},
{