Что мы строим?

Сегодня мы создадим боковую панель (боковую панель навигации), которая может расширяться, чтобы отображать значки + текст, и которая может сворачиваться, чтобы отображать только значки. И когда вы обновите страницу, состояние боковой панели будет сохранено. Или, другими словами, если вы сверните боковую панель и обновите страницу, она все равно будет свернута и не развернута.

Давайте начнем!

Перво-наперво, давайте настроим наше приложение для реагирования:

npx create-react-app sidebar-demo

cd в sidebar-demo и откройте его в текстовом редакторе.

Теперь внутри нашей папки src давайте создадим папку components, в которой мы будем хранить компонент боковой панели.

Внутри нашей папки компонентов можно создать файл Sidebar.js и файл Sidebar.css.

Внутри нашего Sidebar.js файла мы разместим следующий код:

И внутри нашего Sidebar.css файла:

Давайте продолжим и заменим код в нашем App.js файле следующим кодом:

Запустите err в браузере npm start, и мы получим следующее:

Разве это не странно? Конечно, это является! Но давайте сделаем немного лучше, давайте добавим значки и текст на нашу боковую панель.

Давайте добавим пакет react-icons npm install react-icons — save

В нашем Sidebar.js файле замените его содержимое следующим кодом:

А внутри нашего Sidebar.css файла добавьте следующие стили:

И если мы посмотрим назад в нашем браузере, мы получим следующее:

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

Вернувшись в наш Sidebar.js файл, давайте настроим наш хук useState и соединим его с некоторой "логикой" localStorage:

Так что именно мы здесь делаем? Мы используем localStorage и получаем элемент "свернутая боковая панель" из localStorage. Затем мы устанавливаем состояние нашего isExpanded на true или false в зависимости от того, находится ли элемент «боковая панель со свернутой» на самом деле внутри localStorage. Если этот элемент НАХОДИТСЯ внутри localStorage, тогда мы устанавливаем isExpanded в false, иначе мы устанавливаем его в true.

Первоначально у нас всегда будет развернутая боковая панель, пока мы не нажмем на переключатель меню, который в этот момент установит элемент «боковая панель свернутый» внутри localStorage и сохранит состояние нашей боковой панели как свернутое.

Давайте продолжим и обработаем событие onClick для нашего переключателя меню, внутри нашего Sidebar.js файла найдите следующую строку кода:

<RiMenuLine className="sidebar-icon" />

и замените его на:

<RiMenuLine
  className="sidebar-icon"
  onClick={handleToggler}
/>

И прямо перед нашим оператором возврата внутри нашего компонента боковой панели добавьте следующую функцию-обработчик:

Когда мы нажимаем оператор if, мы видим, развернута ли в настоящее время боковая панель при нажатии на наш переключатель меню, и если он развернут, то мы хотим его свернуть. Чтобы свернуть его, мы setIsExpanded установим значение false, а также хотим добавить в localStorage элемент «свернутая боковая панель», который имеет значение true, чтобы сохранить состояние боковой панели, как мы упоминали выше. И код вне оператора if запускается только в случае сбоя нашего оператора if или, другими словами, если боковая панель уже была свернута, когда был нажат наш переключатель меню. И если он уже был свернут, чтобы снова развернуть его, мы устанавливаем IsExpanded в значение true, а также удаляем элемент «боковая панель свернутый» из localStorage.

Теперь у нас есть вся «логика» для развертывания и сворачивания боковой панели, теперь нам просто нужно увидеть ее в действии. Итак, давайте добавим наши последние строки кода!

Внутри Sidebar.js замените следующую строку кода:

<div className="Sidebar">
  //...
</div>

с участием:

<div className={isExpanded ? "Sidebar" : "Sidebar collapsed">
  //...
</div>

Также добавьте в Sidebar.css следующие стили:

И бум! Теперь у нас должно получиться что-то вроде этого:

Если вы хотите посмотреть, что происходит с localStorage, откройте инструменты разработчика и перейдите на вкладку «Приложение». Затем разверните «Локальное хранилище» слева и нажмите http://localhost:3000. Как только вы его откроете, нажмите на переключатель меню на боковой панели и посмотрите, что происходит внутри полей «Ключ / значение» локального хранилища. Как вы можете видеть, когда вы нажимаете переключатель меню, когда он раскрыт, он добавляет элемент «боковая панель-свернута» со значением true, а если вы обновите, этот элемент все еще находится в локальном хранилище! И когда вы расширяете боковую панель, элемент удаляется из локального хранилища. Именно это мы и настроили внутри нашей функции-обработчика в Sidebar.js!

Спасибо за то, что следили за мной, и желаю всего хорошего!