我有一个react组件,需要提前知道它的尺寸,before it renders itself.

当我在jquery中制作一个小部件时,我只需要$('#container').width(),就可以在构建组件时提前获得容器的宽度.

<div id='container'></div>

这些容器的维度在CSS中定义,以及页面上的一系列其他容器.谁定义React中组件的高度、宽度和位置?我已经习惯了这样做,并且能够访问它.但在React中,我似乎只能在组件渲染后才能访问这些信息.

推荐答案

正如前面已经提到的,在将任何元素呈现到DOM之前,您无法获得该元素的维度.在Reaction中可以做的是只呈现一个容器元素,然后获取它的大小(单位为componentDidMount),然后呈现内容的睡觉.

我得了working example分.

请注意,在componentDidMount中使用setState是一种反模式,但在本例中是可以的,因为这正是我们要实现的目标.

干杯

代码:

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>
    );
  }
}

Css相关问答推荐

在react native中应用阴影

Primeng Angular更改p-dialog背景 colored颜色

可折叠/可展开的数据表行:如何使Shadcn数据表中的可折叠内容全宽?

具有不同边框宽度和 colored颜色 的边框半径,Safari渲染问题

设置ScaleImageButton的样式

输入中的框始终显示在MUI文本字段中

如何在Delphi的TMS Web Core上向窗体添加背景图像

如何使用 Ant Design 为不同的屏幕尺寸制作自定义组件样式

当滚动量较小时,在滚动问题上动画粘性导航

SVG样式中的CSS类名是否是全局的?

Angular Material - 将 matsnackbar 置于所有对话框之上

CSS 不要 Select 包含混合内容的 div 中的第一个元素

为什么同一个 CSS 类连续出现两次

如何添加一个类以在开始时触发转换

网格区域即使使用 fr 也不会减小其宽度

创建一条淡出/在各个方向变得透明的线

在 RC.1 中,某些样式无法使用绑定语法添加

我应该使用 CSS :disabled 伪类还是 [disabled] 属性 Select 器,还是见仁见智?

如何在 javascript 中获取 HTML 元素的样式值?

在 Twitter Bootstrap 中创建圆角的正确方法