Добавление класса другому компоненту в React 
		
		
		
		Здравствуйте.  
	Подскажите, как можно по клику на кнопку добавить класс какому-то другому компоненту в проекте, вне текущего компонента? Button.js 
<button onClick={handleBtn}>Клик</button>
Box.js <div>Сюда добавить класс</div> App.js <Box /> <Button />  | 
	
		
 В простом случае: просто кинуть событие клика в общий родитель, и из этого родителя простаивать класс. 
	В сложном случае: использовать контекст. В очень сложном энтерпрайз случае: использовать стор.  | 
	
		
 Самый простой вариант: 
	
import React, {useState} from 'react';
function Box(props: {className?: string}) {
    return <div className={props.className}>Сюда добавить класс</div>;
}
function Button(props: {
    setBoxClassName: React.Dispatch<React.SetStateAction<string | undefined>>,
}) {
    return <button onClick={() => {
        props.setBoxClassName(w => w ? undefined : 'd-none');
    }}>Клик</button>
}
function App() {
    const [boxClassName, setBoxClassName] = useState<string | undefined>();
    
    return <>
        <Box className={boxClassName}/>
        <Button setBoxClassName="setBoxClassName"/>
    </>;
}
 | 
	
		
 Цитата: 
	
  | 
	
		
 Raadsert, нигде не "популярно". Прямая работа с DOM, т.е. element ref(и аналоги из иных фреймворков) - это крайний случай, заразервированный в основном для сторонних блиблиотек и для тех кто знает что делает. Работая в рамках фреймворка вы работаете с данными, заботу по рисованию этих данных полностью берёт на себя фреймворк; касаться DOM вне его рамок не следует. 
	 | 
	
		
 Цитата: 
	
  | 
	
		
 Цитата: 
	
 Странно, на любых курсах рассказывают о ref как способе взаимодействия с DOM элементом.  | 
	
		
 Raadsert, 
	Цитата: 
	
 Дело не в какой-то там оптимизации, дело в нарушении логики фреймворка: фреймворк не ожидает, что DOM как либо изменится извне, он рассчитывает, что DOM будет в таком виде в каком он его оставил. Потому трогать DOM руками стоит только если иначе действительно никак, при этом очень осторожно и с оглядкой. В противном случае очень легко можно наплодить сложных багов.  | 
| Часовой пояс GMT +3, время: 06:02. |