前言

这篇文章主要讲解一下React开发过程中一些小技巧和规范,当然本文需要一定的react基础,开发环境和一些基础问题请自行百度。本文非常简洁提炼出一些开发中遇到的知识,掌握技巧可以让你在开发中效率更高,维护变得更加容易,如想系统的学习react开发技巧请参考:huziketang.mangojuice.top/books/react…
正文
setState
用过react的对这个方法已经是很熟悉了,但是可能有些人并没有把这个方法用的非常熟练,当我们调用这个方法时react会把传的参数与当前组件的state合并,然后重新走render方法,刷新界面。
值得注意的是setState是异步的,并不会及时修改,而是放到任务队列中(想要了解任务队列请参考JS事件循环:www.jianshu.com/p/184988903…),稍后将状态合并到state,所以我们完全不用担心连续写了几个setState会不会影响性能,react已经帮我做好了。

我们发现我们点击按钮的时候,我们改变state是不能够立即获取的,并且无论条用几个setState方法render只走了一次。
另外setState第二个参数是状态改变完成后触发的回调。

如果我们想用一种同步的方法操作state呢,setState其实支持对象和回调函数两种参数,我们通常用的就是上面传一个对象类型。我们来看一种情况

我们期望状态data是1+1+2=4,但是因为setState会合并,data改变后只是3。所以我们要用第二种方法传回调的方式来达到同步操作state,他会把上一次的状态作为参数传入这个回调(可以理解成传对象不排队去合并,传回调需要排队)。

状态改变完成后data是4喽
ref
在使用react的时候几乎不需要跟DOM打交道,更新render几乎覆盖了我们所有的需求,但是一些特定场景和方便我们需要去获取dom,例如页面加载完成我们要获取Input焦点,就需要input.focus()。ref可以获取已经挂载的dom节点。我们给节点设置ref时,有两种写法。
第一种是通过直接ref属性命名

第二种是通过回调

这里react官方强烈推荐第二种写法,第二种方法会在组件挂载时触发赋值,组件卸载赋值为null,减少内存压力。
第一种方式react官方不在维护,并在以后版本弃用(dom未挂载时,操作不当会报错)。
ref不仅可以用在节点,也可以对自定义组件的引用


我们可以在控制台看到test组件的状态方法都可以访问到,如果有需要可以在test组件外调用它的方法或者取值,但是非常不推荐这么做,会让我们的项目难以理解和维护。另外补充一个es6知识点,写在constructor中的属性和方法会挂在组件的本身实例中(如test组件中的test2方法),写在constructor外面则会挂在原型上(如test组件中的test1方法)。

受控组件
react中并没有双向绑定,input和select都要绑定一个change事件;每当表单的状态发生变化,都会被写入组件的state中,这些元素的 value 值被 React.js 所控制、渲染的组件。这种组件被称为受控组件,这是 React.js 所推崇的做法。

非受控组件
不受react state控制的就是非受控组件,获取它的value值通过就需要访问dom来操作。

总结
技术点结合理解的总结,一些地方如果大家没用过需要去加以思考和实践,了解常用的技巧和按照官方的推荐会使我们的项目更加容易维护,增加开发效率。写总结就是对自己的技术复习和巩固,后续会继续分享react开发知识点,欢迎大家提问和补充。