Как-то так для скролла:
class Header extends Component {
state = {
headerClass: headerClass(),
headerSticky: headerSticky(),
};
componentDidMount() {
window.addEventListener('scroll', this.handleScroll);
};
componentWillUnmount() {
window.removeEventListener('scroll', this.handleScroll);
};
handleScroll = e => {
this.setState({
headerSticky: headerSticky(),
});
};
render() {
...
}
}
Для обработки ресайза лучше использовать
applyContainerQuery из
react-container-query:
import { applyContainerQuery } from 'react-container-query';
import { First, Second, Wrapper } from '../somePlace';
const myQuery = {
hasMinWidth: {
minWidth: 1024,
},
};
class MyComponent extends Component {
...
render() {
const {
containerQuery: { hasMinWidth },
} = this.props;
return (
<Wrapper>
{hasMinWidth ? <First /> : <Second />}
</Wrapper>
);
}
}
export default applyContainerQuery(MyComponent, myQuery);
Так вы сможете обрабатывать ресайз во всем приложении.
Вы, конечно, можете повесить слушателя как в случае со
scroll, но лучше разрулить все это с помощью
applyContainerQuery так как один слушатель будет менять все компоненты приложения. Ну или можете попробовать свою реализацию этой утилиты написать.