У меня есть событие, когда вы изменяете размер окна покажет боковую панель рабочего стола или мобильную боковую панель.если окно меньше чем Но есть переменные, которые не обновляются немедленно, чтобы показать боковую панель, если я нахожусь в окне рабочего стола, я мог бы это с классом
Я создал песочницу https://codesandbox.io/s/sidebar-hooks-8oefi дляпосмотрите код, у меня есть компонент класса в App_class.js, который, если я заменю в App, работает, но с перехватами (файл App_hooks.js, по умолчанию в App.js) я не могу заставить его работать
Спасибо за внимание.Я с нетерпением жду вашего ответа.
с классом, я мог бы сделать это, используя:
if (isMobile !== wasMobile) {
this.setState({
isOpen: !isMobile
});
}
const App = props => {
//minicomponent to update width
const useListenResize = () => {
const [isOpen, setOpen] = useState(false);
const [isMobile, setMobile] = useState(true);
//const [previousWidth, setPreviousWidth] = useState( -1 );
let previousWidth = -1;
const updateWidth = () => {
const width = window.innerWidth;
const widthLimit = 576;
let newValueMobile = width <= widthLimit;
setMobile(isMobile => newValueMobile);
const wasMobile = previousWidth <= widthLimit;
if (isMobile !== wasMobile) {
setOpen(isOpen => !isMobile);
}
//setPreviousWidth( width );
previousWidth = width;
};
useEffect(() => {
updateWidth();
window.addEventListener("resize", updateWidth);
return () => {
window.removeEventListener("resize", updateWidth);
};
// eslint-disable-next-line
}, []);
return isOpen;
};
const [isOpen, setOpen] = useState(useListenResize());
const toggle = () => {
setOpen(!isOpen);
};
return (
<div className="App wrapper">
<SideBar toggle={toggle} isOpen={isOpen} />
<Container fluid className={classNames("content", { "is-open": isOpen })}>
<Dashboard toggle={toggle} isOpen={isOpen} />
</Container>
</div>
);
};
export default App;
с setState не работает