#### 1、问题描述
在 render() 里面某个DOM 结点上定义了 ref='xxx' 后,在生命周期里面使用 this.refs.xxx 获取 xxx 结点,控制台报错 xxx 结点 undefined。
#### 2、原因分析
![](https://box.kancloud.cn/55345dc5d28107e99d2ad20700670d68_800x652.png)
根据 react 的机制(见上图),render() 方法执行后会进入生命周期 componentDidMount 中,正常情况下在 componentDidMount 中可以使用 this.refs.xxx 获取在 render() 中定义的 ref 属性,但是这里出现了 undefined ,即 this.refs.xxx 的值为 undefined。
为什么会出现这样的情况呢?
在 render() 内,rerutn(DOM结构)之前有一句 return false,导致在 DOM 中定义的 ref='xxx' 没被渲染,故而 react 取不到 xxx 的值(主要是在检测数据的合法性方面会导致这个问题)
#### 3、解决方案
1、 在 componentDidMount 中取值时检测一下 xxx 结点是否已被定义:
```javascript
const { keyPersonnelChart } = this.refs
if ( xxx !== undefined) {
// do something
}
```
2、不要在 render() 中 return(DOM结构) 之前使用 return false 语句,延伸出 不要在父级检测数据的合法性,直接将这一步放到子组件中进行。例如:
```javascript
render() {
if ( !this.props.data ) {
return false
}
return (
<div ref='xxx'></div>
)
}
```
- 1、前端常用知识点
- 1.1 如何修改input的placeholder
- 1.2 如何修改滚动条默认样式
- 1.3 理解BFC
- 1.4 数字每隔三位加逗号
- 1.4.1 简单粗暴的做法
- 1.4.2 比较常用的方法
- 1.5 D3图表中如何让文字竖着显示
- 1.6 Handlebars模板中如何比较两个值
- 1.7 SVG/D3中字体特殊设置
- 1.8 Handlebars模板中序号从1开始排序
- 1.9 修改checkbox默认样式
- 1.10 D3.js 执行transition动画中断
- 2、执法项目
- 2.1 面积图填充为线条样式
- 2.2 一个paseFloat()方法两分钟就把页面卡死了
- 2.3 开发中常见的细节问题
- 3、迪爱斯项目
- 3.1 热点冰点卡死问题
- 3.2 ifream切换导致内存泄漏
- 3.3 D3文字旋转问题
- 3.4 D3图表提示框位置问题
- 3.5 js如何实现页面iframe事件监听
- 3.6 zTree-jQuery 树插件异步加载如何传参
- 3.7 图易加载无延迟隐藏部分页面组件
- 4、指挥大屏项目
- 4.1 长时间运行chrome浏览器奔溃问题
- 5、PC端指挥项目
- 5.1 地图上各区域添加图表并将图表显示在各区域中心位置
- 5.2 svg里面添加image标签该的width,height属性被压缩问题
- 5.3 地图上添加图表或文字后较小的区域无法钻取
- 5.4 svg添加image元素在谷歌低版本不显示
- 5.5 input输入框记住用户名或密码后样式被浏览器自带的样式覆盖
- 6、运维项目
- 6.1 按键F11页面无法缩放
- 6.2 主页面逆时针旋转的两段弧问题
- 6.3 websocket的close方法不起作用
- 7、汉阳项目
- 8、警务云项目
- 8.1 PKI兼容chrome浏览器问题
- 9、万达项目
- 9.1 直方图中出现数值比刻度值大
- 9.2 D3选择集的处理模版
- 9.3 将数字转化为三分位节法
- 9.4 制作简易X轴
- 10、涪陵项目
- 10.1 IE11部分版本浏览器下滚动条位置不对
- 11、昆明大屏展示
- 11.1第一期五个页面经验汇总
- 11.2防止文本越界
- 11.3SVG里面谨慎设置font-family
- 11.4Error: <rect> attribute height: A negative value is not valid
- 12、技侦动态管控
- 12.1 使用CSS3动画导致页面抖动
- 12.2 使用 digitroll数字滚动插件,给数字加逗号(3位数分隔)
- 13、ES6前端开发框架
- 13.1 打包后部署到Tomcat下访问路径不对
- 14、贵阳项目
- 14.1、关于引用不到saga文件报错的问题
- 15、React前端开发框架
- 15.1 this.refs.xxx获取到的值是undefined
- 15.2 Mockjs与mapbox不兼容
- 15.3 axios联调报跨域错误
- 15.4 saga结合websocket使用方法
- 15.5 打包部署后访问页面白屏