[解決済み] リアクトコンポーネントのサイズ(height/width)をレンダリング前に取得する方法は?
2023-08-31 01:05:04
質問
リアクトのコンポーネントで、事前に寸法を知る必要があります。 それ自身をレンダリングする前に。
jqueryでウィジェットを作成する場合、単に
$('#container').width()
で、コンポーネントを構築する際にコンテナの幅を事前に取得することができます。
<div id='container'></div>
これらのコンテナの寸法は、ページ上の他のコンテナの束と一緒にCSSで定義されています。Reactのコンポーネントの高さ、幅、配置は誰が定義するのですか?私はCSSがそれを行い、それにアクセスできることに慣れています。しかし、Reactでは、コンポーネントがレンダリングされた後にのみ、その情報にアクセスできるようです。
どのように解決するのですか?
すでに述べたように、どの要素もDOMにレンダリングされるまでは寸法を取得することができません。Reactでできることは、コンテナ要素だけをレンダリングし、そのサイズを
componentDidMount
でサイズを取得し、その後残りのコンテンツをレンダリングすることです。
を作ったので の動作例 .
を使用することに注意してください。
setState
で
componentDidMount
はアンチパターンですが、この場合、まさに私たちが達成しようとしていることなので、問題ありません。
乾杯!
コードです。
import React, { Component } from 'react';
export default class Example extends Component {
state = {
dimensions: null,
};
componentDidMount() {
this.setState({
dimensions: {
width: this.container.offsetWidth,
height: this.container.offsetHeight,
},
});
}
renderContent() {
const { dimensions } = this.state;
return (
<div>
width: {dimensions.width}
<br />
height: {dimensions.height}
</div>
);
}
render() {
const { dimensions } = this.state;
return (
<div className="Hello" ref={el => (this.container = el)}>
{dimensions && this.renderContent()}
</div>
);
}
}
関連
-
[css3]ピュアCSS3によるネオンライト効果
-
[CSSチュートリアル】ピュアCSSでDIVホバーを実現するサンプルコード(固定位置編)
-
[CSSチュートリアル】カラフルで知的なシャドウ効果を実現するCSS
-
[解決済み] Bootstrapの列をすべて同じ高さにするにはどうしたらいいですか?
-
[解決済み] 純粋なCSSで動的な文字量に応じたフォントサイズをレスポンシブにする
-
[解決済み】ReactJS - "setState "が呼ばれるたびにrenderが呼び出されるのですか?
-
[解決済み] Bootstrapでコンテナを垂直方向に中央化する方法は?
-
[解決済み】Reactコンポーネントが再レンダリングされる原因を追跡する
-
[解決済み】マージンやパディングを親コンテナの高さに対する割合で設定するには?
-
[解決済み】display:flexを使って残りの縦幅をCSSで埋める。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[CSSチュートリアル]CSSで簡単!高周波な異形ボタンを実現する方法
-
[CSSチュートリアル】よくある2D変換を5つ実現するCSS
-
[CSSチュートリアル】CSSのトリッキーなグラデーションで高度な背景光アニメーションの感覚を実現
-
[CSSレイアウト例】float(フロート)、position(ポジション)プロパティの差分によるCSSレイアウト
-
[css3]css3は、背景画像の色を変更するためのさまざまな方法を実現するために
-
[css3]グレーモードやブラックモードを実現するCSS3フィルター(フィルター)サンプルコード(Webページ用
-
[CSSチュートリアル】ピュアCSSでDIVホバーを実現するサンプルコード(固定位置編)
-
[CSSチュートリアル】CSSプロパティ*-gradientの有用性を探る
-
[CSSチュートリアル】CSSでマウスの位置をマッピングし、マウスの動きでページ要素を制御する効果を実現する(コード例)
-
[解決済み] Reactでブラウザのリサイズ時にビューを再描画する