Введение в React Hooks

ReactReactBeginner
Практиковаться сейчас

This tutorial is from open-source community. Access the source code

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

Добро пожаловать в документацию по React! В этом практическом занятии вы познакомитесь с использованием хуков.

Это Guided Lab, который предоставляет пошаговые инструкции, чтобы помочь вам учиться и практиковаться. Внимательно следуйте инструкциям, чтобы выполнить каждый шаг и получить практический опыт. Исторические данные показывают, что это лабораторная работа уровня начальный с процентом завершения 100%.

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL react(("React")) -.-> react/FundamentalsGroup(["Fundamentals"]) react(("React")) -.-> react/AdvancedConceptsGroup(["Advanced Concepts"]) react(("React")) -.-> react/StateManagementGroup(["State Management"]) react/FundamentalsGroup -.-> react/jsx("JSX") react/FundamentalsGroup -.-> react/components_props("Components and Props") react/FundamentalsGroup -.-> react/event_handling("Handling Events") react/AdvancedConceptsGroup -.-> react/hooks("React Hooks") react/StateManagementGroup -.-> react/use_state_reducer("Using useState and useReducer") subgraph Lab Skills react/jsx -.-> lab-100375{{"Введение в React Hooks"}} react/components_props -.-> lab-100375{{"Введение в React Hooks"}} react/event_handling -.-> lab-100375{{"Введение в React Hooks"}} react/hooks -.-> lab-100375{{"Введение в React Hooks"}} react/use_state_reducer -.-> lab-100375{{"Введение в React Hooks"}} end

Использование хуков

Виртуальная машина уже содержит проект React. В общем случае, вам нужно только добавить код в App.js.

Для установки зависимостей используйте следующую команду:

npm i

Функции, имена которых начинаются с use, называются хуками. useState - это встроенный хуок, предоставляемый React. Другие встроенные хуки можно найти в справочнике API. Также вы можете написать свои собственные хуки, комбинируя существующие.

Хуки более ограничены, чем другие функции. Вы можете вызывать хуки только в начале компонентов (или других хуков). Если вы хотите использовать useState в условиях или циклах, извлеките новый компонент и поместите его там.

В предыдущем примере у каждого MyButton был свой независимый count, и при нажатии на каждую кнопку изменялось только count для нажатой кнопки:

Не используя хуки

Однако часто вам нужно, чтобы компоненты могли делиться данными и всегда обновляться вместе.

Чтобы оба компонента MyButton отображали одинаковое значение count и обновлялись вместе, вам нужно перенести состояние из отдельных кнопок "вверх" в ближайший компонент, содержащий все они.

В этом примере это MyApp:

Используя хуки

Теперь при нажатии на любую кнопку count в MyApp изменится, что приведет к изменению обоих значений count в MyButton. Вот, как это можно выразить в коде.

Во - первых, перенесите состояние из MyButton в MyApp:

// App.js
export default function MyApp() {
  const [count, setCount] = useState(0);

  function handleClick() {
    setCount(count + 1);
  }

  return (
    <div>
      <h1>Counters that update separately</h1>
      <MyButton />
      <MyButton />
    </div>
  );
}

function MyButton() {
  //... мы переносим код отсюда...
}

Затем передайте состояние из MyApp в каждый MyButton, вместе с общим обработчиком клика. Вы можете передавать информацию в MyButton с использованием фигурных скобок в JSX, так же, как вы это делали ранее с встроенными тегами, такими как <img>:

export default function MyApp() {
  const [count, setCount] = useState(0);

  function handleClick() {
    setCount(count + 1);
  }

  return (
    <div>
      <h1>Counters that update together</h1>
      <MyButton count={count} onClick={handleClick} />
      <MyButton count={count} onClick={handleClick} />
    </div>
  );
}

Информация, которую вы передаете так, называется пропсами. Теперь компонент MyApp содержит состояние count и обработчик события handleClick и передает оба эти значения в качестве пропсов в каждую кнопку.

Наконец, измените MyButton, чтобы он читал пропсы, переданные из родительского компонента:

function MyButton({ count, onClick }) {
  return <button onClick={onClick}>Clicked {count} times</button>;
}

При нажатии на кнопку срабатывает обработчик onClick. Каждая кнопка имеет пропс onClick, установленный на функцию handleClick внутри MyApp, поэтому код внутри нее выполняется. Этот код вызывает setCount(count + 1), увеличивая переменную состояния count. Новое значение count передается в качестве пропса в каждую кнопку, поэтому все они показывают новое значение. Это называется "поднятием состояния вверх". Перемещая состояние вверх, вы поделили его между компонентами.

import { useState } from "react";

export default function MyApp() {
  const [count, setCount] = useState(0);

  function handleClick() {
    setCount(count + 1);
  }

  return (
    <div>
      <h1>Counters that update together</h1>
      <MyButton count={count} onClick={handleClick} />
      <MyButton count={count} onClick={handleClick} />
    </div>
  );
}

function MyButton({ count, onClick }) {
  return <button onClick={onClick}>Clicked {count} times</button>;
}

Для запуска проекта используйте следующую команду. Затем вы можете обновить вкладку Web 8080, чтобы просмотреть веб - страницу.

npm start

Резюме

Поздравляем! Вы завершили практическое занятие по использованию хуков. Вы можете выполнить больше практических заданий в LabEx, чтобы улучшить свои навыки.

OSZAR »