【问题标题】:Access parent node from virtualDOM before it renders | ReactJS在渲染之前从 virtualDOM 访问父节点 |反应JS
【发布时间】:2017-06-30 15:17:26
【问题描述】:

我需要根据父元素设置组件尺寸。是否可以在渲染之前从 virtualDOM 中通过 ref 获取父级的宽度和高度?

父母

export default class App extends React.Component {
  render() {

    return (
      <div>
        <div className={'avocado-container'} ref={(container) => { this.container = container; }}>
          <Resizer parent={this} scrollAxis={'y'}>
          </Resizer>
        </div>
      </div>
    );
  }
}

我需要在 child 的构造函数中获取尺寸。

this.refs.container.offsetWidth 之类的有可能吗?

【问题讨论】:

  • 为什么不把它们作为 props 从父组件传递?

标签: javascript reactjs jsx virtual-dom


【解决方案1】:

否。 布局尺寸由浏览器计算,而不是虚拟 DOM。要么手动设置尺寸,要么使用 CSS 使您的子组件填充宽度和高度。您还可以从componentDidMount 中的渲染组件读取宽度和高度,并在那里调用setState,这并不理想,会导致第二次渲染,但有时需要完成。

【讨论】:

  • 这样的组件可以测试吗?
  • 如果需要在didMount中测试元素维度流的读取,可以使用jsdom等工具提供必要的环境。如果你不想测试它,你可以在 didMount 中做一个if 语句来检查某些对象的存在,比如global.window
  • 不要误会,但是jsdom不支持获取html元素的真实宽度和高度,所以没有真实的浏览器环境asaik很难测试
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-19
  • 2016-09-12
  • 2018-10-26
  • 2016-02-23
  • 2020-12-16
  • 2018-04-05
  • 1970-01-01
相关资源
最近更新 更多