JavaScript

Как обратится к классу элемента в react?

Хочу сделать кнопку чтобы при клике переключался класс. Вот что я написал:
 function ClickButton(props) { 
let state = "off"
function press(props) {

state === "off" ? "on" : "off";
}

return {props.label}
}
ReactDOM.createRoot(document.getElementById("app")).render(

);
Но класс не обновляется почему то, подскажите что я сделал не так. Заранее спасибо!
Юра Гудков
Юра Гудков
6 773
Проблема в том, что вы не обновляете состояние переменной state, а только меняете её значение. Для обновления состояния в React используется функция setState(). Вот как можно исправить ваш код:

function ClickButton(props) {
const [state, setState] = React.useState("off");

function press() {
setState(state === "off" ? "on" : "off");
}

return <button className={state} onClick={press}>{props.label}</button>;
}

ReactDOM.createRoot(document.getElementById("app")).render(
<ClickButton label={"Нажми"} />
);

Здесь мы используем хук useState для создания переменной состояния state и функции setState для её обновления. В функции press мы обновляем состояние, проверяя текущее значение state и меняя его на противоположное. Затем мы передаем значение state в атрибут className кнопки.
Александр Козаченко
Александр Козаченко
25 526
Лучший ответ
Юра Гудков Значит все таки без хуков никак. Спасибо за ответ!
Хрен его знает, как оно обратится. А тебе-то что?
Вадим Тарасов
Вадим Тарасов
91 306
Юра Гудков Да так, интересно
Для того, чтобы изменить класс элемента в React, вам нужно использовать состояние (state). В вашем коде состояние не используется правильно, поэтому класс не меняется. Вот исправленный код:
----------------------------------------------------------
import React, { useState } from 'react';
import ReactDOM from 'react-dom';

function ClickButton(props) {
const [state, setState] = useState('off');

function press() {
setState(state === 'off' ? 'on' : 'off');
}

return (
<button className={state} onClick={press}>
{props.label}
</button>
);
}

ReactDOM.createRoot(document.getElementById('app')).render(
<ClickButton label={'Нажми'} />
);
----------------------------------------------------------
Здесь используется хук useState, который позволяет определить состояние компонента и функцию setState для изменения состояния. При клике на кнопку вызывается функция press, которая изменяет состояние на противоположное значение. Класс кнопки зависит от значения состояния.