【发布时间】:2017-05-17 21:49:36
【问题描述】:
我目前正在开发基于 React.js 的应用程序。假设我们在 React 中有一个 Header 组件,其中有一个小徽标组件,它应该只以移动分辨率级别显示。我正在从父组件传递一个 isMobile 道具。该道具基于:
const mql = global.matchMedia(`(min-width: 768px)`);
mql.addListener(() => this._mediaQueryChanged());
this.setState({
mql: mql,
isMobile: !mql.matches
});
_mediaQueryChanged() {
this.setState({
isMobile: !this.state.mql.matches
});
}
<Header isMobile={this.state.isMobile} />
在Header:
render() {
const {isMobile} = this.props;
const containerClass = classNames('header-component', {
'is-mobile': isMobile
});
return (
<header className={containerClass}>
{
isMobile &&
(
<section className="mobile-header">
<Button className="toggle-menu" onClick={() => this._toggleMenu()}>
<Icon name="menu" />
</Button>
<Logo className="header-logo" />
</section>
)
}
<span>login</span>
</header>
);
}
如果mql 匹配,则它不是移动的。我的问题是:每次我们更改媒体查询时,我是否应该传递这个参数并重新渲染组件?在重新渲染隐藏/显示徽标组件期间?或者只是使用 CSS 显示/隐藏它,组件将一直挂载在那里。没有重新渲染。
想法?
【问题讨论】:
-
我可能会使用 CSS 媒体查询,因为重新渲染视口大小的变化可能会很昂贵,尤其是在它不断变化的情况下。这也正是媒体查询的用途……根据视口的大小更改/显示/隐藏外观。
标签: css reactjs responsive-design media-queries