私は現在React.jsベースのアプリケーションを開発中です。 Reactの中にHeader
というコンポーネントがあり、内部に小さなロゴコンポーネントがあり、モバイルの解像度レベルでのみ表示する必要があるとします。親コンポーネントからisMobile
小道具を渡しています。React - responsive app - CSS経由でコンポーネント内の要素を隠すかレンダリングしないでください
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を表示/非表示にするだけで、コンポーネントは常にそこにマウントされます。いいえ、再レンダリングtho。
思考?
ビューポートサイズの変更による再レンダリングが高価になる可能性があるため、特に変更が継続している場合は、CSSメディアクエリを使用します。ビューポートのサイズに基づいて外観を変更/表示/非表示するためのものです。 –