<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ react - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ Browse thousands of programming tutorials written by experts. Learn Web Development, Data Science, DevOps, Security, and get developer career advice. ]]>
        </description>
        <link>https://www.freecodecamp.org/ukrainian/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ react - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/ukrainian/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Tue, 09 Jun 2026 04:19:15 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/ukrainian/news/tag/react/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ Посібник із фонових зображень React: як встановити фонове зображення за допомогою вбудованого стилю CSS ]]>
                </title>
                <description>
                    <![CDATA[ Існує чотири способи встановити властивість стилю backgroundImage за допомогою вбудованого CSS у React. Цей посібник покаже вам усі чотири методи зі зразками коду для кожного. Як встановити фонове зображення в React за допомогою зовнішньої URL-адреси Якщо ваше зображення знаходиться десь в інтернеті, ви можете встановити фонове зображення свого елемента, розмістивши ]]>
                </description>
                <link>https://www.freecodecamp.org/ukrainian/news/posibnyk-iz-fonovykh-zobrazhen-react-yak-vstanovyty-fonove-zobrazhennya-za-dopomohoyu-vbudovanoho-stylyu-css/</link>
                <guid isPermaLink="false">642d2575d5889e064f8f1763</guid>
                
                    <category>
                        <![CDATA[ react ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Ihor Zakatsiura ]]>
                </dc:creator>
                <pubDate>Thu, 06 Apr 2023 08:46:41 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/ukrainian/news/content/images/2023/04/fcc-bg-image-2.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Оригінальна публікація:</strong> <a href="https://www.freecodecamp.org/news/react-background-image-tutorial-how-to-set-backgroundimage-with-inline-css-style/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">React Background Image Tutorial – How to Set backgroundImage with Inline CSS Style</a>
      </p><p>Існує чотири способи встановити властивість стилю <code>backgroundImage</code> за допомогою вбудованого CSS у React.</p><p>Цей посібник покаже вам усі чотири методи зі зразками коду для кожного.</p><h2 id="-react-url-"><strong>Як встановити фонове зображення в React за допомогою зовнішньої URL-адреси</strong></h2><p>Якщо ваше зображення знаходиться десь в інтернеті, ви можете встановити фонове зображення свого елемента, розмістивши URL-адресу таким чином:</p><figure class="kg-card kg-code-card"><pre><code class="language-jsx">function App() {
  return (
    &lt;div style={{ 
      backgroundImage: `url("https://via.placeholder.com/500")` 
    }}&gt;
      Hello World
    &lt;/div&gt;
  );
}</code></pre><figcaption>Встановлення фонового зображення за допомогою зовнішньої URL-адреси</figcaption></figure><p>Наведений вище код відтворить єдиний елемент <code>&lt;div&gt;</code> із застосованим до нього стилем <code>background-image: url(<a href="https://via.placeholder.com/500">https://via.placeholder.com/500</a>)</code>.</p><h2 id="-react-src"><strong>Як встановити фонове зображення в React з вашої папки /src</strong></h2><p>Якщо ви завантажуєте свою програму за допомогою Create React App і маєте своє зображення в папці <code>src/</code>, ви можете спочатку виконати <code>import</code> зображення, а потім розмістити його як фон свого елемента:</p><figure class="kg-card kg-code-card"><pre><code class="language-jsx">import React from "react";
import background from "./img/placeholder.png";

function App() {
  return (
    &lt;div style={{ backgroundImage: `url(${background})` }}&gt;
      Hello World
    &lt;/div&gt;
  );
}

export default App;</code></pre><figcaption>Встановлення фонового зображення за допомогою імпортованого зображення</figcaption></figure><p>Коли ви виконаєте команду <code>npm start</code>, React покаже помилку «Failed to Compile» і зупинить збірку, якщо зображення не знайдено:</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2020/12/React-failed-to-compile-image.png" class="kg-image" alt="React-failed-to-compile-image" width="600" height="400" loading="lazy"><figcaption>Помилка збірки. Зображення не знайдено.</figcaption></figure><p>Таким чином ви не відображатимете пошкоджені посилання на зображення у своєму вебзастосунку. У наведеному вище коді значення <code>backgroundImage</code> встановлюється за допомогою рядка шаблону, що дозволяє вставляти вирази JavaScript.</p><h2 id="-react-url--1"><strong>Як встановити фонове зображення в React за допомогою методу відносної URL-адреси</strong></h2><p>Папку <code>public/</code> можна використовувати для додавання статичних ресурсів до програми React. Будь-які файли, які ви поміщаєте в папку, будуть доступними в інтернеті.</p><p>Якщо ви помістите файл <code>image.png</code> у папку <code>public/</code>, ви зможете отримати доступ до нього за адресою <code>&lt;your host address&gt;/image.png</code>. Під час запуску React на локальному комп’ютері зображення має бути за адресою <code>http://localhost:3000/image.png</code>.</p><p>Потім ви можете призначити URL-адресу відносно адреси хосту, щоб встановити фонове зображення. Ось приклад:</p><figure class="kg-card kg-code-card"><pre><code class="language-jsx">&lt;div style={{ backgroundImage: "url(/image.png)" }}&gt;
  Hello World
&lt;/div&gt;</code></pre><figcaption>Встановлення фонового зображення за допомогою відносної URL-адреси</figcaption></figure><p>Встановивши URL-шлях до <code>/image.png</code> як у прикладі вище, вебпереглядач шукатиме фонове зображення за <code>&lt;your host address&gt;/image.png</code>.</p><p>Ви також можете створити іншу папку всередині <code>public/</code>, якщо хочете впорядкувати зображення в папки. Наприклад:</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2020/12/Screen-Shot-2020-12-14-at-20.18.30.png" class="kg-image" alt="Screen-Shot-2020-12-14-at-20.18.30" width="600" height="400" loading="lazy"><figcaption>Створення папки img/ всередині папки public/</figcaption></figure><p>Не забудьте змінити значення <code>backgroundImage</code> на <code>url(/img/image.png)</code>, якщо вирішите створити папку.</p><h2 id="-react-url--2"><strong>Як встановити фонове зображення в React за допомогою методу абсолютної URL-адреси</strong></h2><p>Ви також можете включити абсолютну URL-адресу, використовуючи змінну середовища <code>PUBLIC_URL</code> у Create React App, ось так:</p><figure class="kg-card kg-code-card"><pre><code class="language-jsx">&lt;div style={{ 
  backgroundImage: `url(${process.env.PUBLIC_URL + '/image.png'})` 
}}&gt;
  Hello World
&lt;/div&gt;</code></pre><figcaption>Встановлення фонового зображення за допомогою абсолютної URL-адреси</figcaption></figure><p>Коли ви запустите це на своєму локальному комп’ютері, сценарії React оброблятимуть значення <code>PUBLIC_URL</code>. Коли ви запускаєте його локально, він виглядатиме як відносна URL-адреса, а не як абсолютна URL-адреса:</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2020/12/absolute-url-background-image-1.png" class="kg-image" alt="absolute-url-background-image-1" width="600" height="400" loading="lazy"><figcaption>Абсолютна URL-адреса зображення не відображається на локальному комп’ютері</figcaption></figure><p>Абсолютну URL-адресу можна буде побачити лише під час розгортання React у робочій програмі пізніше.</p><h2 id="-"><strong>Як встановити фонове зображення з додатковими властивостями</strong></h2><p>Якщо ви хочете додатково налаштувати фонове зображення, це можна зробити, додавши додаткові властивості після <code>backgroundImage</code>. Ось приклад:</p><figure class="kg-card kg-code-card"><pre><code class="language-jsx">
&lt;div style={{ 
  backgroundImage: `url(${process.env.PUBLIC_URL + '/image.png'})`,
  backgroundRepeat: 'no-repeat',
  width:'250px' 
}}&gt;
  Hello World
&lt;/div&gt;</code></pre><figcaption>Встановлення фонового зображення з додатковими властивостями</figcaption></figure><p>Встановлені вище властивості додаватимуть властивості <code>background-repeat: no-repeat</code> та <code>width: 250px</code> разом із <code>background-image</code> до елементу <code>&lt;div&gt;</code>.</p><p>Дякую, що прочитали, і сподіваюся, ця стаття була для вас корисною. Якщо у вас є запитання, ви можете знайти мене в <a href="https://twitter.com/nsebhastian">твіттері</a>. Час від часу я також буду ділитися деякими короткими порадами для розробників. 🙂</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Посібник React: як працювати з кількома прапорцями ]]>
                </title>
                <description>
                    <![CDATA[ Робота з кількома прапорцями в React повністю відрізняється від того, як ви використовуєте звичайні прапорці HTML. Тому в цьому посібнику ми побачимо, як працювати з кількома прапорцями в React. Ви дізнаєтесь:  * як використовувати прапорець як контрольований компонент у React  * як використовувати методи масиву map та reduce ]]>
                </description>
                <link>https://www.freecodecamp.org/ukrainian/news/posibnyk-react-yak-pratsyuvaty-z-kilkoma-praportsyamy/</link>
                <guid isPermaLink="false">641c1acb35fefee8cac04469</guid>
                
                    <category>
                        <![CDATA[ react ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Ihor Zakatsiura ]]>
                </dc:creator>
                <pubDate>Wed, 29 Mar 2023 08:17:45 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/ukrainian/news/content/images/2023/03/checkbox_selection.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Оригінальна публікація:</strong> <a href="https://www.freecodecamp.org/news/how-to-work-with-multiple-checkboxes-in-react/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">React Tutorial – How to Work with Multiple Checkboxes</a>
      </p><p>Робота з кількома прапорцями в React повністю відрізняється від того, як ви використовуєте звичайні прапорці HTML.</p><p>Тому в цьому посібнику ми побачимо, як працювати з кількома прапорцями в React.</p><p>Ви дізнаєтесь:</p><ul><li>як використовувати прапорець як контрольований компонент у React</li><li>як використовувати методи масиву map та reduce для складних обчислень </li><li>як створити масив певної довжини, попередньо заповнений певним значенням</li></ul><p>та багато іншого.</p><p>Ця стаття є частиною мого курсу <a href="https://master-redux.yogeshchavan.dev/">Mastering Redux</a>. Ось попередній <a href="https://www.youtube.com/watch?v=izSw74H08Bc">перегляд</a> програми, яку ми будемо створювати на курсі.</p><p>Тож почнемо.</p><h2 id="-"><strong>Як працювати з одним прапорцем</strong></h2><p>Давайте почнемо з функціональності одного прапорця, перш ніж переходити до кількох.</p><p>У цій статті я буду використовувати синтаксис React Hooks для створення компонентів. Отже, якщо ви не знайомі з хуками React, перегляньте мою статтю «<a href="https://levelup.gitconnected.com/an-introduction-to-react-hooks-50281fd961fe">Вступ до хуків Reac</a>t».</p><p>Подивіться на наведений нижче код:</p><pre><code class="language-js">&lt;div className="App"&gt;
  Select your pizza topping:
  &lt;div className="topping"&gt;
    &lt;input type="checkbox" id="topping" name="topping" value="Paneer" /&gt;Paneer
  &lt;/div&gt;
&lt;/div&gt;
</code></pre><p>Ось демоверсія на <a href="https://codesandbox.io/s/young-snow-lzplh?file=/src/App.js">Code Sandbox</a>.</p><p>У наведеному вище коді ми щойно оголосили один прапорець, який подібний до того, як ми оголошуємо прапорець HTML.</p><p>Тож ми можемо легко встановити та зняти прапорець, як показано нижче:</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2021/05/check_uncheck-1.gif" class="kg-image" alt="check_uncheck-1" width="600" height="400" loading="lazy"></figure><p>Але щоб відобразити на екрані позначений прапорець чи ні, нам потрібно перетворити його на контрольований компонент.</p><p>У React контрольований компонент керується станом, тому вхідне значення можна змінити, лише змінивши стан, пов’язаний із цим введенням.</p><p>Подивіться на наведений нижче код:</p><pre><code class="language-js">export default function App() {
  const [isChecked, setIsChecked] = useState(false);

  const handleOnChange = () =&gt; {
    setIsChecked(!isChecked);
  };

  return (
    &lt;div className="App"&gt;
      Select your pizza topping:
      &lt;div className="topping"&gt;
        &lt;input
          type="checkbox"
          id="topping"
          name="topping"
          value="Paneer"
          checked={isChecked}
          onChange={handleOnChange}
        /&gt;
        Paneer
      &lt;/div&gt;
      &lt;div className="result"&gt;
        Above checkbox is {isChecked ? "checked" : "un-checked"}.
      &lt;/div&gt;
    &lt;/div&gt;
  );
}
</code></pre><p>Ось демоверсія на <a href="https://codesandbox.io/s/dazzling-oskar-qcil8?file=/src/App.js">Code Sandbox</a>.</p><p>У наведеному вище коді ми оголосили стан <code>isChecked</code> у компоненті з початковим значенням <code>false</code> за допомогою хука <code>useState</code> :</p><pre><code class="language-js">const [isChecked, setIsChecked] = useState(false);
</code></pre><p>Потім для прапорця вводу ми встановили два додаткові параметри <code>checked</code> та <code>onChange</code> таким чином:</p><pre><code class="language-js">&lt;input
  ...
  checked={isChecked}
  onChange={handleOnChange}
/&gt;
</code></pre><p>Щоразу, коли ми натискаємо прапорець, буде викликана функція обробки <code>handleOnChange</code>, яку ми використовуємо для встановлення значення стану &nbsp;<code>isChecked</code>.</p><pre><code class="language-js">const handleOnChange = () =&gt; {
  setIsChecked(!isChecked);
};
</code></pre><p>Отже, якщо прапорець позначено, ми встановлюємо значення <code>isChecked</code> на <code>false</code>. Але якщо прапорець знятий, ми встановлюємо значення <code>true</code> за допомогою <code>!isChecked</code>. Потім ми передаємо це значення в прапорець введення для перевіреного параметру <code>checked</code>.</p><p>Таким чином прапорець вводу стає контрольованим компонентом, значенням якого керує стан.</p><p>Зверніть увагу, що в React завжди рекомендується використовувати контрольовані компоненти для полів введення, навіть якщо код виглядає складним. Це гарантує, що зміна вхідних даних відбувається лише всередині обробника <code>onChange</code>.</p><p>Стан введення не буде змінено будь-яким іншим способом, і ви завжди отримуватимете правильне й оновлене значення стану введення.</p><p>Лише в рідкісних випадках ви можете використовувати React ref для неконтрольованого використання компоненту.</p><h2 id="--1"><strong>Як обробляти кілька прапорців</strong></h2><p>Тепер давайте розглянемо, як ви будете обробляти кілька прапорців.</p><p>Подивіться на приклад у <a href="https://codesandbox.io/s/mystifying-tu-xlpgb?file=/src/App.js">Code Sandbox</a>.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2021/05/multiple_checkboxes-2.png" class="kg-image" alt="multiple_checkboxes-2" width="600" height="400" loading="lazy"></figure><p>Тут ми показуємо список топінгів і відповідну ціну. Виходячи з того, які топінги вибрано, нам потрібно відобразити загальну суму.</p><p>Раніше з одним прапорцем ми мали лише стан <code>isChecked</code>, і ми змінювали стан прапорця на основі цього.</p><p>Але тепер у нас багато прапорців, тому додавати кілька викликів <code>useState</code> для кожного прапорця непрактично.</p><p>Отже, давайте оголосимо масив у стані, що вказує стан кожного прапорця.</p><p>Щоб створити масив, довжина якого дорівнює кількості прапорців, ми можемо використати метод <code>fill</code>:</p><pre><code class="language-js">const [checkedState, setCheckedState] = useState(
    new Array(toppings.length).fill(false)
);
</code></pre><p>Тут ми оголосили стан із початковим значенням у вигляді масиву, заповненого значенням <code>false</code>.</p><p>Отже, якщо ми маємо 5 топінгів, масив станів <code>checkedState</code> міститиме 5 значень <code>false</code>, як наведено нижче:</p><pre><code class="language-js">[false, false, false, false, false]
</code></pre><p>І як тільки ми поставимо/знімемо прапорець, ми змінимо відповідний стан &nbsp;<code>false</code> на <code>true</code> або <code>true</code> на <code>false</code>.</p><p>Тут наведено остаточний код на <a href="https://codesandbox.io/s/wild-silence-b8k2j?file=/src/App.js">Code Sandbox</a>.</p><p>Повний код <code>App.js</code> виглядає так:</p><pre><code class="language-js">import { useState } from "react";
import { toppings } from "./utils/toppings";
import "./styles.css";

const getFormattedPrice = (price) =&gt; `$${price.toFixed(2)}`;

export default function App() {
  const [checkedState, setCheckedState] = useState(
    new Array(toppings.length).fill(false)
  );

  const [total, setTotal] = useState(0);

  const handleOnChange = (position) =&gt; {
    const updatedCheckedState = checkedState.map((item, index) =&gt;
      index === position ? !item : item
    );

    setCheckedState(updatedCheckedState);

    const totalPrice = updatedCheckedState.reduce(
      (sum, currentState, index) =&gt; {
        if (currentState === true) {
          return sum + toppings[index].price;
        }
        return sum;
      },
      0
    );

    setTotal(totalPrice);
  };

  return (
    &lt;div className="App"&gt;
      &lt;h3&gt;Select Toppings&lt;/h3&gt;
      &lt;ul className="toppings-list"&gt;
        {toppings.map(({ name, price }, index) =&gt; {
          return (
            &lt;li key={index}&gt;
              &lt;div className="toppings-list-item"&gt;
                &lt;div className="left-section"&gt;
                  &lt;input
                    type="checkbox"
                    id={`custom-checkbox-${index}`}
                    name={name}
                    value={name}
                    checked={checkedState[index]}
                    onChange={() =&gt; handleOnChange(index)}
                  /&gt;
                  &lt;label htmlFor={`custom-checkbox-${index}`}&gt;{name}&lt;/label&gt;
                &lt;/div&gt;
                &lt;div className="right-section"&gt;{getFormattedPrice(price)}&lt;/div&gt;
              &lt;/div&gt;
            &lt;/li&gt;
          );
        })}
        &lt;li&gt;
          &lt;div className="toppings-list-item"&gt;
            &lt;div className="left-section"&gt;Total:&lt;/div&gt;
            &lt;div className="right-section"&gt;{getFormattedPrice(total)}&lt;/div&gt;
          &lt;/div&gt;
        &lt;/li&gt;
      &lt;/ul&gt;
    &lt;/div&gt;
  );
}
</code></pre><p>Давайте розберемося, що ми тут робимо.</p><p>Ми оголосили прапорець вводу, як показано нижче:</p><pre><code class="language-js">&lt;input
  type="checkbox"
  id={`custom-checkbox-${index}`}
  name={name}
  value={name}
  checked={checkedState[index]}
  onChange={() =&gt; handleOnChange(index)}
/&gt;
</code></pre><p>Тут ми додали атрибут <code>checked</code> із відповідним значенням <code>true</code> або <code>false</code> зі стану <code>checkedState</code>. Отже, кожен прапорець матиме правильне значення свого позначеного стану.</p><p>Ми також додали обробник <code>onChange</code> і передаємо <code>index</code> прапорця, який позначено/знято, до методу <code>handleOnChange</code>.</p><p>Обробник методу <code>handleOnChange</code> має наступний вигляд:</p><pre><code class="language-js">const handleOnChange = (position) =&gt; {
  const updatedCheckedState = checkedState.map((item, index) =&gt;
    index === position ? !item : item
  );

  setCheckedState(updatedCheckedState);

  const totalPrice = updatedCheckedState.reduce(
    (sum, currentState, index) =&gt; {
      if (currentState === true) {
        return sum + toppings[index].price;
      }
      return sum;
    },
    0
  );

  setTotal(totalPrice);
};
</code></pre><p>Тут ми спочатку спочатку проходимось по масиву <code>checkedState</code>, використовуючи метод масивів <code>map</code>. Якщо значення переданого параметра <code>position</code> збігається з поточним індексом, ми змінюємо його значення. Потім, якщо значення є <code>true</code>, воно буде перетворено на <code>false</code> за допомогою <code>!item</code>, а якщо значення <code>false</code> — воно буде перетворено на <code>true</code>.</p><p>Якщо <code>index</code> не збігається з наданим параметром <code>position</code>, ми не змінюємо його значення, а просто повертаємо значення, яким воно є.</p><pre><code class="language-js">const updatedCheckedState = checkedState.map((item, index) =&gt;
  index === position ? !item : item
);

// the above code is the same as the below code

const updatedCheckedState = checkedState.map((item, index) =&gt; {
  if (index === position) {
    return !item;
  } else {
    return item;
  }
});
</code></pre><p>Я використовував тернарний оператор <code>?:</code>, оскільки він робить код коротшим, але ви можете використовувати будь-який метод масиву.</p><p>Якщо ви не знайомі з тим, як працюють такі методи масиву, як <code>map</code> чи <code>reduce</code>, то перегляньте <a href="https://www.freecodecamp.org/news/complete-introduction-to-the-most-useful-javascript-array-methods/">цю статтю</a>, яку я написав.</p><p>Далі ми встановлюємо масив <code>checkedState</code> до оновленого масиву <code>updatedCheckedState</code>. Це важливо, тому що якщо ви не оновите стан <code>checkedState</code> в обробнику <code>handleOnChange</code>, ви не зможете встановити або зняти прапорець.</p><p>Це пояснюється тим, що ми використовуємо значення <code>checkedState</code> для прапорця, щоб визначити, чи позначено прапорець чи ні (оскільки це контрольований компонент, як показано нижче):</p><pre><code class="language-js">&lt;input
  type="checkbox"
  ...
  checked={checkedState[index]}
  onChange={() =&gt; handleOnChange(index)}
/&gt;
</code></pre><p>Зауважте, що ми створили окрему змінну <code>updatedCheckedState</code> і передаємо цю змінну функції <code>setCheckedState</code>. Ми використовуємо метод <code>reduce</code> для <code>updatedCheckedState</code>, а не для вихідного масиву <code>checkedState</code>.</p><p>Причина в тому, що за замовчуванням функція <code>setCheckedState</code>, яка використовується для оновлення стану, є асинхронною.</p><p>Виклик функції <code>setCheckedState</code> не гарантує, що ви отримаєте оновлене значення масиву <code>checkedState</code> у наступному рядку.</p><p>Тож ми створили окрему змінну та використали її в методі <code>reduce</code>.</p><p>Ви можете прочитати <a href="https://www.freecodecamp.org/news/what-is-state-in-react-explained-with-examples/">цю статтю</a>, якщо ви не знайомі з тим, як<em> </em>стан працює в React.</p><p>Потім, щоб обчислити загальну суму, ми використовуємо метод масиву <code>reduce</code>:</p><pre><code class="language-js">const totalPrice = updatedCheckedState.reduce(
  (sum, currentState, index) =&gt; {
    if (currentState === true) {
      return sum + toppings[index].price;
    }
    return sum;
  },
  0
);
</code></pre><p>Метод масиву <code>reduce</code> отримує чотири параметри, з яких ми використовуємо лише три: <code>sum</code>, <code>currentState</code> та <code>index</code>. Ви можете використовувати інші назви, якщо хочете, оскільки це лише параметри.</p><p>Ми також передаємо <code>0</code> як початкове значення, яке також відоме як значення <code>accumulator</code> для параметру <code>sum</code>.</p><p>Потім у функції reduce ми перевіряємо, чи поточне значення масиву <code>checkedState</code> дійсно <code>true</code>.</p><p>Якщо значення <code>true</code>, це означає, що прапорець позначено, тому ми додаємо значення відповідного <code>price</code> за допомогою <code>sum + toppings[index].price</code>.</p><p>Якщо значення масиву <code>checkedState</code> є <code>false</code>, ми не додаємо його ціну, а просто повертаємо розраховане попереднє значення <code>sum</code>.</p><p>Потім ми встановлюємо значення <code>totalPrice</code> до стану <code>total</code> за допомогою <code>setTotal(totalPrice)</code></p><p>Таким чином ми можемо правильно розрахувати загальну суму для обраних топінгів, як ви бачите нижче.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2021/05/toppings-1.gif" class="kg-image" alt="toppings-1" width="600" height="400" loading="lazy"></figure><p>Ось <a href="https://b8k2j.csb.app/">посилання</a> на попередній перегляд наведеного вище прикладу на Code Sandbox, щоб спробувати самостійно.</p><h3 id="--2">Дякую, що прочитали!</h3><p>Більшості розробників важко зрозуміти, як працює Redux. Але кожен розробник React повинен знати, як працювати з Redux, оскільки промислові проєкти здебільшого використовують Redux для керування більшими проєктами.</p><p>Тому, щоб вам було легше, я запустив курс <a href="https://master-redux.yogeshchavan.dev/">Mastering Redux</a>.</p><p>У цьому курсі ви вивчите Redux з самого початку, а також створите <a href="https://www.youtube.com/watch?v=izSw74H08Bc">повноцінний застосунок</a> для замовлення їжі з нуля за допомогою Redux.</p><p>Приєднуйтесь до курсу та отримуйте обмежену пропозицію знижки, а також мою популярну книгу «Опанування сучасного JavaScript» безкоштовно.</p><figure class="kg-card kg-image-card"><img src="https://gist.github.com/myogeshchavan97/98ae4f4ead57fde8d47fcf7641220b72/raw/c3e4265df4396d639a7938a83bffd570130483b1/banner.jpg" class="kg-image" alt="banner" width="600" height="400" loading="lazy"></figure><p><strong>Хочете бути в курсі регулярного контенту по JavaScript, React, Node.js? Слідкуйте за мною в <a href="https://www.linkedin.com/in/yogesh-chavan97/">LinkedIn</a>.</strong></p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Як використовувати localStorage з хуками React для встановлення та отримання елементів ]]>
                </title>
                <description>
                    <![CDATA[ localStorage — це об’єкт вебсховища, який дозволяє сайтам і програмам JavaScript зберігати пари ключ-значення у веббраузері безстроково. Це означає, що дані зберігаються після оновлення сторінки (sessionStorage) і навіть перезапуску браузера. Це вказує на те, що дані, які зберігаються в браузері, залишаться, навіть якщо вікно браузера закрито. В загальному, localStorage дозволяє ]]>
                </description>
                <link>https://www.freecodecamp.org/ukrainian/news/yak-vykorystovuvaty-localstorage-z-khukamy-react-dlya-vstanovlennya-ta-otrymannya-elementiv/</link>
                <guid isPermaLink="false">63f88809d125780651a3b57c</guid>
                
                    <category>
                        <![CDATA[ react ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Ihor Zakatsiura ]]>
                </dc:creator>
                <pubDate>Wed, 08 Mar 2023 03:39:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/ukrainian/news/content/images/2023/03/Yellow-and-Purple-Geometric-Covid-19-General-Facts-Twitter-Post.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Оригінальна публікація:</strong> <a href="https://www.freecodecamp.org/news/how-to-use-localstorage-with-react-hooks-to-set-and-get-items/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to Use localStorage with React Hooks to Set and Get Items</a>
      </p><p>localStorage — це об’єкт вебсховища, який дозволяє сайтам і програмам JavaScript зберігати пари ключ-значення у веббраузері безстроково.</p><p>Це означає, що дані зберігаються після оновлення сторінки (sessionStorage) і навіть перезапуску браузера. Це вказує на те, що дані, які зберігаються в браузері, залишаться, навіть якщо вікно браузера закрито.</p><p>В загальному, localStorage дозволяє розробникам зберігати дані в браузері та отримувати їх.</p><p>Однак важливо розуміти, що використання localStorage як бази даних для вашого проєкту не є хорошою практикою, оскільки дані будуть втрачені, коли користувач, наприклад, очистить кеш.</p><p>Розробники часто використовують localStorage для додавання функції нічного режиму до програми, збереження елементу списку справ або збереження введених користувачем значень форми.</p><p>У цій публікації ми розглянемо, як використовувати localStorage з хуками React, щоб легко встановлювати та отримувати елементи.</p><h2 id="-react"><strong>Що таке хуки React?</strong></h2><p>Хуки React — це функції JavaScript, які ви можете імпортувати з пакету React, щоб додати можливостей своїм компонентам.</p><p>Хуки дозволяють React-розробникам використовувати методи стану та життєвого циклу у функціональних компонентах. Вони також працюють з існуючим кодом, завдяки чому їх легко адаптувати до кодової бази.</p><p>Щоб використовувати localStorage з React нам знадобляться два хука:</p><ul><li><code>useState()</code> — хук стану вашого компоненту, який гарантовано зміниться через деякий час. Хук <code>useState()</code> — це функція, яка приймає один параметр, початковий стан (який може бути значенням змінної, об’єкта або будь-якого іншого типу даних у вашому компоненті), і повертає два значення: поточний стан і функцію, яку можна використовувати для оновлення стану.<br></li><li><code>useEffect()</code> — хук ефекту, активується за замовчуванням після першого відтворення та кожного разу, коли змінюється стан. Як випливає з назви, він використовується для виконання ефекту кожного разу, коли змінюється стан. Цей хук чудово підходить для налаштування слухачів, отримання даних з API та видалення слухачів перед видаленням компоненту з DOM.</li></ul><h2 id="-localstorage-react"><strong>Як реалізувати localStorage у React</strong></h2><p>localStorage надає нам доступ до об’єкту, що зберігає браузер, за допомогою п’яти методів:</p><ul><li><code>setItem()</code>: цей метод використовується для додавання ключа та значення до localStorage;</li><li><code>getItem()</code>: цей метод використовується для отримання елемента з localStorage за допомогою ключа;</li><li><code>removeItem()</code>: ця техніка використовується для видалення елемента з localStorage на основі його ключа;</li><li><code>clear()</code>: ця техніка використовується для видалення всіх елементів з localStorage;</li><li><code>key()</code>: коли ви вказуєте номер, це допомагає отримати ключ localStorage.</li></ul><p>У цій публікації ми розглянемо лише найпопулярніші методи, а саме перші два.</p><h3 id="-setitem-"><strong>Як використовувати метод <strong> <code>setItem()</code></strong></strong></h3><p>Надаючи значення ключу, цей метод використовується для зберігання об’єктів у localStorage. Це значення може мати будь-який тип даних, включно з текстом, цілим числом, об’єктом, масивом тощо.</p><p>Важливо пам’ятати, що для того, щоб зберігати дані в localStorage, ви повинні спочатку зв’язати їх за допомогою <code>JSON.stringify()</code> функції.</p><pre><code class="language-react">const [items, setItems] = useState([]);

useEffect(() =&gt; {
  localStorage.setItem('items', JSON.stringify(items));
}, [items]);</code></pre><p>У наведеному вище коді ми спочатку створили стан і призначили йому порожній масив (у вас може бути будь-який інший тип даних). Потім ми використали <code>useEffect()</code>, щоб додавати об’єкти до localStorage кожного разу, коли змінюється значення нашого стану. Ми зробили це, передавши стан як другий аргумент.</p><p>По суті, це основний код, який відповідає за додавання пар ключ-значення до localStorage:</p><pre><code class="language-react">localStorage.setItem('items', JSON.stringify(items));</code></pre><p>Простіше кажучи, попередній код називає ключ («items<em>»</em>), а потім призначає йому значення, але спочатку ми повинні були переконатися, що дані, які ми додаємо, є рядком JSON.</p><p>Ми використовуємо JSON.stringify() для перетворення об’єкта JSON у текст JSON, збережений у рядку, який потім можна передати на вебсервер.</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://paper-attachments.dropbox.com/s_EAEEAE9063B0CA7CBC6574F36123E82B36B6C1EC3724A86DA7C0B4C67C2DD652_1645380076460_explaining+useeffect+local+storage.jpg" class="kg-image" alt="s_EAEEAE9063B0CA7CBC6574F36123E82B36B6C1EC3724A86DA7C0B4C67C2DD652_1645380076460_explaining+useeffect+local+storage" width="600" height="400" loading="lazy"><figcaption>Структура роботи хуків із локальним сховищем для встановлення елементів</figcaption></figure><h3 id="-getitem-"><strong>Як використовувати метод &nbsp;getItem()</strong></h3><p>Цей метод отримує об’єкти з localStorage. Існують інші методи, щоб досягти цього за допомогою React, але ми будемо використовувати хук <code>useEffect()</code>, тому що він найкращий.</p><p>Хук <code>useEffect()</code> допомагає нам отримати всі елементи під час першого рендерингу, тобто коли компонент встановлюється або повторно рендериться, він отримує всі наші дані з localStorage.</p><p>Зауважте, що саме тому ми передали порожній другий аргумент.</p><pre><code class="language-react">const [items, setItems] = useState([]);

useEffect(() =&gt; {
  const items = JSON.parse(localStorage.getItem('items'));
  if (items) {
   setItems(items);
  }
}, []);</code></pre><p>Важливо пам’ятати, що коли ми зберігали дані, ми спочатку перетворили їх на рядок JSON. Це означає, що для того, щоб ми могли використовувати його, нам потрібно перетворити рядок JSON назад на об’єкт JSON. Ми робимо це за допомогою методу <code>JSON.parse()</code>.</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://paper-attachments.dropbox.com/s_EAEEAE9063B0CA7CBC6574F36123E82B36B6C1EC3724A86DA7C0B4C67C2DD652_1645369611908_explaining+useeffect+local+storage2.jpg" class="kg-image" alt="s_EAEEAE9063B0CA7CBC6574F36123E82B36B6C1EC3724A86DA7C0B4C67C2DD652_1645369611908_explaining+useeffect+local+storage2" width="600" height="400" loading="lazy"><figcaption>Структура роботи хуків із локальним сховищем для отримання елементів</figcaption></figure><h2 id="-"><strong>Висновок</strong></h2><p>У цій публікації ми дізналися, як використовувати localStorage з хуками React, коли його використовувати та який хук використовувати.</p><p>Якщо ви хочете побачити, як це працює на практиці, ви можете отримати вихідний код простої програми зі списком справ, яка використовує localStorage і ці хуки за <a href="https://github.com/olawanlejoel/Todo-App">посиланням</a>.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Як передавати дані та події між компонентами в React ]]>
                </title>
                <description>
                    <![CDATA[ Якщо ви спробуєте реалізувати операції CRUD (тобто чотири базові функції: створення, читання, оновлення та видалення) за допомогою кінцевих точок API, то ви можете виявити, що керувати даними в кількох компонентах дещо важко. Або, можливо, у вас є модальний компонент, але ви хочете запустити його з іншого компоненту. Розібратися, як впоратися ]]>
                </description>
                <link>https://www.freecodecamp.org/ukrainian/news/yak-peredavaty-dani-ta-podiyi-mizh-komponentamy-v-react/</link>
                <guid isPermaLink="false">63f5c1c40a9291056ed3e8d2</guid>
                
                    <category>
                        <![CDATA[ react ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Ihor Zakatsiura ]]>
                </dc:creator>
                <pubDate>Wed, 01 Mar 2023 05:02:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/ukrainian/news/content/images/2023/02/Colorful-Animal-Crossing-Icons-Icon-Set-2.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Оригінальна публікація:</strong> <a href="https://www.freecodecamp.org/news/pass-data-between-components-in-react/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to Pass Data and Events Between Components in React</a>
      </p><p>Якщо ви спробуєте реалізувати операції CRUD (<em>тобто чотири базові функції: створення, читання, оновлення та видалення</em>) за допомогою кінцевих точок API, то ви можете виявити, що керувати даними в кількох компонентах дещо важко.</p><p>Або, можливо, у вас є модальний компонент, але ви хочете запустити його з іншого компоненту.</p><p>Розібратися, як впоратися з цими сценаріями, може бути важко.</p><p>У цій публікації я покажу, як ви можете це зробити.</p><h2 id="-"><strong>Як передати дані між батьківським та дочірнім компонентом</strong></h2><p>Спершу давайте передамо дані між батьківським і дочірнім компонентами. </p><p>Спочатку вам потрібно буде створити два компоненти, один батьківський і один дочірній.</p><figure class="kg-card kg-code-card"><pre><code>import React from 'react'

export default function Parent() {
  return (
    &lt;div&gt;
      
    &lt;/div&gt;
  )
}
</code></pre><figcaption>Батьківський.js</figcaption></figure><figure class="kg-card kg-code-card"><pre><code>import React from 'react'

export default function Child() {
    return (
        &lt;div&gt;
            
        &lt;/div&gt;
    )
}
</code></pre><figcaption>Дочірній.js</figcaption></figure><p>Далі ви імпортуєте дочірній компонент у батьківський і повертаєте його.</p><figure class="kg-card kg-code-card"><pre><code>import React from 'react'
import Child from './Child';

export default function Parent() {
  return (
    &lt;div&gt;
      &lt;Child/&gt;
    &lt;/div&gt;
  )
}</code></pre><figcaption>Виклик дочірнього компонента у батьківському компоненті</figcaption></figure><p>Потім ви створюєте функцію та кнопку для запуску цієї функції. Крім того, ви створюєте стан за допомогою хука <em>useState</em>, щоб керувати даними.</p><pre><code>import React from 'react'
import Child from './Child';
import { Button } from 'semantic-ui-react';
import { useState } from 'react';
import './App.css';

export default function Parent() {
  const [data, setData] = useState('');
  
  const parentToChild = () =&gt; {
    setData("This is data from Parent Component to the Child Component.");
  }
  return (
    &lt;div className="App"&gt;
      &lt;Child/&gt;
      
      &lt;div&gt;
        &lt;Button primary onClick={() =&gt; parentToChild()}&gt;Click Parent&lt;/Button&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  )
}
</code></pre><p>Як ви можете бачити тут, ми викликаємо функцію <em>parentToChild</em> після натискання кнопки <em><em>Click Parent</em></em>. Коли натиснуто кнопку <em><em>Click Parent</em></em>, у змінній <em><em>data</em></em> буде збережено «<em>This is data from Parent Component to the Child Component</em>».</p><p>Тепер давайте передамо цей стан даних нашим дочірнім компонентам. Ви можете зробити це за допомогою пропсів.</p><p>Передайте дані як пропси, коли викликаєте дочірній компонент, таким чином:</p><figure class="kg-card kg-code-card"><pre><code>&lt;Child parentToChild={data}/&gt;</code></pre><figcaption>Батьківський.js</figcaption></figure><p>Тут ми передаємо дані дочірнього компонента як <em><em>data</em></em>.</p><p><code>data</code> — це дані, які ми повинні передати, а <code>parentToChild</code> — це назва пропсу.</p><p>Далі настав час записати дані в дочірній компонент. А це дуже просто.</p><p>Тут може бути два випадки.</p><p>Випадок 1: якщо ви використовуєте функціональний компонент, просто перехопіть parentToChild у параметрах.</p><figure class="kg-card kg-code-card"><pre><code>import React from 'react'

export default function Child({parentToChild}) {
    return (
        &lt;div&gt;
            {parentToChild}
        &lt;/div&gt;
    )
}</code></pre><figcaption>Функціональний компонент React</figcaption></figure><p>Випадок 2: якщо у вас компонент класу, просто використайте <code>this.props.parentToChild</code>.</p><figure class="kg-card kg-code-card"><pre><code>import React, { Component } from 'react'

export default class Child extends Component {
    render() {
        return (
            &lt;div&gt;
                {this.props.parentToChild}
            &lt;/div&gt;
        )
    }
}</code></pre><figcaption>Класовий компонент React</figcaption></figure><p>У будь-якому випадку ви отримаєте однакові результати:</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2021/06/Screenshot-2021-06-06-132836.png" class="kg-image" alt="Screenshot-2021-06-06-132836" width="600" height="400" loading="lazy"></figure><p>Коли ми натискаємо на кнопку <code>Click Parent</code>, ми побачимо виведені дані на екрані.</p><pre><code>import React from 'react'
import Child from './Child';
import { Button } from 'semantic-ui-react';
import { useState } from 'react';
import './App.css';

export default function Parent() {
  const [data, setData] = useState('');
  
  const parentToChild = () =&gt; {
    setData("This is data from Parent Component to the Child Component.");
  }
  return (
    &lt;div className="App"&gt;
      &lt;Child parentToChild={data}/&gt;
      
      &lt;div className="child"&gt;
        &lt;Button primary onClick={() =&gt; parentToChild()}&gt;Click Parent&lt;/Button&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  )
}</code></pre><p>Вище ви бачите повний код для <code>Parent Component</code>.</p><h2 id="--1"><strong>Як передати дані між дочірнім та батьківським компонентом</strong></h2><p>Це дещо складніше.</p><p>Спершу вам потрібно створити функцію в батьківському компоненті під назвою <code>childToParent</code> і порожній стан під назвою <code>data</code>.</p><figure class="kg-card kg-code-card"><pre><code>const [data, setData] = useState('');

const childToParent = () =&gt; {
   
}</code></pre><figcaption>Батьківський компонент</figcaption></figure><p>Потім передайте функцію <code>childToParent</code> як пропс<em> </em>до дочірнього компонента.</p><figure class="kg-card kg-code-card"><pre><code>&lt;Child childToParent={childToParent}/&gt;</code></pre><figcaption>Передача childToParent до дочірнього компонента.</figcaption></figure><p>Тепер у дочірньому компоненті прийміть виклик цієї функції як пропс<em> </em>та призначте його до події <em>onClick</em>.</p><p>Крім того, оголосіть стан, який містить деякі дані у вигляді рядка або числа.</p><p>Потім передайте дані до функції <code>parentToChild</code> як параметри.</p><figure class="kg-card kg-code-card"><pre><code>import React from 'react'
import { Button } from 'semantic-ui-react';

export default function Child({childToParent}) {
    const data = "This is data from Child Component to the Parent Component."
    return (
        &lt;div&gt;
            &lt;Button primary onClick={() =&gt; childToParent(data)}&gt;Click Child&lt;/Button&gt;
        &lt;/div&gt;
    )
}</code></pre><figcaption>Дочірній компонент</figcaption></figure><p>Далі в батьківському компоненті прийміть ці дані у функції <code>childToParent</code> як параметр та налаштуйте дані<em> </em>за допомогою хука useState.</p><figure class="kg-card kg-code-card"><pre><code>import './App.css';
import { useState } from 'react';
import Child from './Child';

function Parent() {
  const [data, setData] = useState('');
  
  const childToParent = (childdata) =&gt; {
    setData(childdata);
  }

  return (
    &lt;div className="App"&gt;
      &lt;div&gt;
        &lt;Child/&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  );
}

export default Parent;
</code></pre><figcaption>Батьківський компонент</figcaption></figure><p>Потім покажіть цю змінну <em>data </em>у функції повернення.</p><figure class="kg-card kg-code-card"><pre><code>import './App.css';
import { useState } from 'react';
import Child from './Child';

function Parent() {
  const [data, setData] = useState('');
  
  const childToParent = (childdata) =&gt; {
    setData(childdata);
  }

  return (
    &lt;div className="App"&gt;
     {data}
      &lt;div&gt;
        &lt;Child childToParent={childToParent}/&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  );
}

export default Parent;</code></pre><figcaption>Батьківський компонент</figcaption></figure><p>Дочірня змінна data перезапише батьківську, коли кнопку <code>Click Child</code> буде<em><em> </em></em>натиснуто.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/06/Screenshot-2021-06-06-134803.png" class="kg-image" alt="Screenshot-2021-06-06-134803" width="600" height="400" loading="lazy"></figure><p>Тепер ви можете передавати дані <strong>від</strong> <strong>дочірнього компоненту до батьківського</strong> і <strong>від батьківського до дочірнього </strong>як професіонал.</p><h3 id="-onclick-onchange"><strong>Ви також можете передавати такі події, як onClick або OnChange</strong></h3><p>Просто викличте метод <em>alert </em>у функції <code>childToParent</code> і передайте цю функцію як пропс<em> </em>дочірньому компоненту.</p><figure class="kg-card kg-code-card"><pre><code>import './App.css';
import Child from './Child';

function Parent() {
  const childToParent = () =&gt; {
    alert("This is an alert from the Child Component")
  }

  return (
    &lt;div className="App"&gt;
      &lt;div className="child"&gt;
        &lt;Child childToParent={childToParent}/&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  );
}

export default Parent;</code></pre><figcaption>Батьківський компонент</figcaption></figure><p>А в дочірньому компоненті прийміть функцію <code>childToParent</code><em><em> </em></em>як пропс. Потім призначте його до події onClick у кнопці.</p><figure class="kg-card kg-code-card"><pre><code>import React from 'react'
import { Button } from 'semantic-ui-react';

export default function Child({childToParent}) {
    return (
        &lt;div&gt;
            &lt;Button primary onClick={() =&gt; childToParent()}&gt;Click Child&lt;/Button&gt;
        &lt;/div&gt;
    )
}</code></pre><figcaption>Дочірній компонент</figcaption></figure><p>Ваша функція в батьківському компоненті буде викликана, коли ви натиснете кнопку в дочірньому компоненті, і ви побачите таке сповіщення:</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2021/06/Screenshot-2021-06-06-140405.png" class="kg-image" alt="Screenshot-2021-06-06-140405" width="600" height="400" loading="lazy"></figure><p>Це все!</p><p>Ви можете знайти <a href="https://github.com/nishant-666/Passing-data-in-React">код на Github</a>, якщо бажаєте експериментувати далі.</p><blockquote>Ну ось і все, народе. Щасливого навчання.</blockquote> ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
