使用refs做出反应

时间:2014-10-01 16:00:08

标签: reactjs

React文档包含以下警告:

  

永远不要访问任何组件的渲染方法中的引用 - 或者任何组件的渲染方法甚至在调用堆栈中的任何位置运行。

为什么呢?我的问题是,我正在编写一个组件,它以依赖于孩子大小的方式规划孩子。也就是说,我需要测量DOM节点,因此我需要访问每个孩子,我计划通过refs来渲染。那有什么不对?当然,我需要考虑到一些孩子可能还不存在于refs中(在第一个渲染中,没有孩子存在)。

顺便说一句,我的渲染似乎有效。

1 个答案:

答案 0 :(得分:4)

免责声明:我不是React核心开发人员,但我在一个大型项目中广泛使用它。

TL; DR:最安全的地方是使用生命周期方法,在.render()方法中,组件仍然只是对要做什么的声明性描述。

因为您在.render()方法中构建的内容不是要呈现的组件,而是描述您希望React构建的内容您。这种结构发生得晚一些(当所有的优化都进入时)。同时,返回React.createClass的对象将替换为新对象。可视化它就像你发送一封信给React(发送到.createClass()的对象)而React用包(组件)响应。如果您需要对要创建的子组件执行某些操作,请查看lifecycle methods.refs的时间应填充.componentDidMount()