Я хотел бы, чтобы мои компоненты действовали по-разному в зависимости от ширины окна браузера.Производительность обработчика события в родительском компоненте
Вместо того чтобы повторять одни и те же функции для получения ширины браузера в каждом компоненте, я рассматриваю оборачивать все компоненты в родительском компоненте -
<mainComponent>
<childComponent1/>
<childComponent2/>
<.../>
</mainComponent>
который получает ширину окна и передает его дочерние компоненты -
handleResize = (e) => {
this.setState({windowWidth: window.innerWidth})
};
componentWillMount() {
this.handleResize()
}
componentDidMount() {
window.addEventListener('resize', this.handleResize)
}
componentWillUnmount() {
window.removeEventListener('resize', this.handleResize)
}
render() {
return <div>
{React.cloneElement(this.props.children, { windowWidth: this.state.windowWidth })}
</div>
}
Это похоже на плохое решение, поскольку это может негативно повлиять на производительность, особенно если приложение становится большим.
- Могу ли я предположить, что с этим решением возникнет проблема с производительностью?
- Во время события изменения размера значение пропусков, переданное ребенку, непрерывно изменяется во время действия изменения размера (725, 724, 723, ...). Будут ли какие-либо выигрыши в производительности, если ширина сгруппирована (s, m, l, xl, ...), так что реквизит, переданный ребенку, не изменяется так часто?
- Может быть, проще управлять состоянием, если я использую что-то вроде Redux или Relay, но будет ли какое-то увеличение производительности?
- Есть ли лучший способ решить эту проблему с точки зрения производительности?
Использование медиа запросов действительно потенциальное решение, но было бы здорово, если бы я мог бы использовать JavaScript, поскольку это позволяет более гибко вокруг того, как используется это значение ширины. Например, представьте, что вы хотите отобразить список и подробное представление каждого элемента в этом списке. Если ширина х пикселей, отобразите представление деталей во втором столбце. –
Andy
Вы можете использовать систему бутстрапов, чтобы приблизиться к тому, где вы хотите. После этого вы можете исправить его своим собственным css, чтобы улучшить его. Вы можете добавить свои собственные медиа-querios сверху, например, Bootstrap override. На мой взгляд, это быстрее, и вы можете потратить больше времени на более важные вещи. – Theo