Nikulio
@Nikulio
NaN !== NaN

Правильно ли так отслеживать viewport?

Всем привет
Хочу реализовать смену блоков меню при ресайзе на Реакте. Такая реализация имеет месть быть?

constructor(props) {
    super(props);
    this.state = {width: "0", height: "0"}
  }
  
  componentDidMount() {
    this.updateResize();
    window.addEventListener('resize', this.updateResize);
  }
  
  componentWillUnmount() {
    window.removeEventListener('resize', this.updateResize);
  }
  
  updateResize = () => {
    this.setState({width: window.innerWidth, height: window.innerHeight});
  }


И потом на основе стейта в return() :

{(width >= 1024) ? <div>hello</div>:<div>boy</div>}
  • Вопрос задан
  • 178 просмотров
Решения вопроса 1
rockon404
@rockon404 Куратор тега React
Frontend Developer
Можно использовать applyContainerQuery из react-container-query.
Это будет лучше, чем по всему приложению ставить и снимать слушатели в функциях жизненного цикла.
import { applyContainerQuery } from 'react-container-query';
import { Hello, Boy, Wrapper } from '../somePlace';

const myQuery = {
  hasMinWidth: {
    minWidth: 1024,
  },
};

class MyComponent extends Component {
  ...
  render() {
    const {
      containerQuery: { hasMinWidth },
    } = this.props;

    return (
      <Wrapper>
        {hasMinWidth ? <Hello /> : <Boy />}
      </Wrapper>
    );
  }
}

export default applyContainerQuery(MyComponent, myQuery);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы