![032292d5ac0a5fce0858cdd1b0742a87.png](https://i-blog.csdnimg.cn/blog_migrate/72e98126d21085386e984632c1c2994e.jpeg)
在编写组件中的方法时,经常会遇到语义化很模糊的代码,这对于团队开发是一个很大的问题。因为review代码或者合作时都会影响开发效率。或者到这核心成员离开,项目倒闭的严重影响。所以我们必须重视react代码当中的语义化。ref是个不错的工具,快来学习一下吧。
代替原来的e.target.value
以前的案例中,我们写了下面的代码,使用了e.target
,这并不直观,也不好看。这种情况我们可以使用ref
来进行解决。
![fd272fce38727192c678ca25bb22c1c2.png](https://i-blog.csdnimg.cn/blog_migrate/e3ea86c81f88643baadd1751a990e005.png)
如果要使用ref
来进行,需要现在JSX
中进行绑定, 绑定时最好使用ES6语法中的箭头函数,这样可以简洁明了的绑定DOM元素。
![dbcbc7486365c540f9fc3fb470c62f22.png](https://i-blog.csdnimg.cn/blog_migrate/b0dd9a69c85f038795fa5f8b3bf4d4b5.png)
绑定后可以把上边的类改写成如下代码:
![6fd1d2db624df0d47b8a889c8d9fe301.png](https://i-blog.csdnimg.cn/blog_migrate/83dd62aefa607fcd3c499aface8fd336.png)
这就使我们的代码变得语义化和优雅的多。但是就我个人的经验来讲,我是不建议用ref
这样操作的,因为React
的是数据驱动的,所以用ref会出现各种问题。
#ref
使用中的坑
比如现在我们要用ref绑定取得要服务的数量,可以先用ref
进行绑定。
![16f782ba0f631473a882b151a2c89e30.png](https://i-blog.csdnimg.cn/blog_migrate/186ae5592cd7b15c450daa5e60eaec3d.png)
绑定后可以在addList()
方法中,获取当前<div>
的值.
![317cf197698d3c6b1bab1cb30a4b52bc.png](https://i-blog.csdnimg.cn/blog_migrate/e40492610bc1db590a44fad19e584e89.png)
这时候你打开控制台,点击添加服务按钮,你会返现数量怎么少一个?(就是这个坑),其实这个坑是因为React中更多setState
是一个异步函数所造成的。也就是这个setState
,代码执行是有一个时间的,如果你真的想了解清楚,你需要对什么是虚拟DOM有一个了解。简单的说,就是因为是异步,还没等虚拟Dom渲染,我们的console.log
就已经执行了。
那这个代码怎么编写才会完全正常那,其实setState
方法提供了一个回调函数,也就是它的第二个函数。下面这样写就可以实现我们想要的方法了。
![f40caf054e35f2ac90ad3fae56ca4772.png](https://i-blog.csdnimg.cn/blog_migrate/67d328e4013792ff0b645762d451f398.png)
现在到浏览器中查看代码,就完全正常了。这节课主要学习了ref
的用法和ref
中的坑。学完后练习一下吧,代码这东西,不练习你是学不会的。