Как правило, компоненты реагирования не стремятся получить доступ к DOM с помощью таких методов, как getElementById
.
Вместо этого ваши компоненты должны сохранять свое собственное состояние, а затем их пользовательский интерфейс должен отражать это состояние.
Мы можем упростить ваш пример с помощью useState
.
import React, { useState } from "react";
import "./styles.css";
export default function App() {
const [isNavOpen, setIsNavOpen] = useState(false);
return (
<>
<div className={`sidenav ${isNavOpen ? "open" : ""}`}>
<button className="closebtn" onClick={() => setIsNavOpen(!isNavOpen)}>
×
</button>
<a href="/about">About</a>
<a href="/services">Services</a>
<a href="/client">Clients</a>
<a href="/contact">Contact</a>
</div>
<button onClick={() => setIsNavOpen(!isNavOpen)}>Toggle nav</button>
</>
);
}
Вызов useState(false)
возвращает массив из двух вещей:
простой элемент состояния, isNavOpen
, который может быть либо true
, либо false
. (Мы инициализировали его false
)
функцией setIsNavOpen
, которая может обновлять состояние isNavOpen
новым значением.
Теперь мы можем легко переключать эту переменную состояния с помощью setIsNavOpen(!isNavOpen)
всякий раз, когда мы хотим открыть или закрыть навигационную панель.
Наконец, мы можем использовать эту переменную состояния в пользовательском интерфейсе.
<div className={ `sidenav ${isNavOpen ? "open" : "closed"}` }>
Если isNavOpen
= true, он отображает <div class="sidenav open">
Если isNavOpen
= false, он отображает <div class="sidenav closed">