使用react的一些心得与感想
刚忙完公司的新人训练营,9个人的团队2周完成一个小项目。我负责用remax开发一个微信小程序。remax就是蚂蚁的一个开源框架,让开发者能用react的语法去开发微信小程序。开发体验整体来讲非常不错,感觉也加深了我对react的理解。
之前我没有完整使用react开发一个项目的经验,这次是我第一次使用,不过我对于react的写法也算比较熟悉了,之前完成公司的需求的时候也学到了不少。不过公司的组件基本都是类组件,而我开发的项目都是用的函数组件。函数组件比类组件简洁太多,而且react hooks使用起来也非常爽。具体的细节以后有机会再写吧,本来是打算做完项目之后好好总结一下的,结果之前做项目太累了,周末好好放松了一下,就没啥时间去记录了。简单做个笔记吧。
react的数据绑定是单向的
只有model层影响view层(即页面会随着model层数据的变化,而重新渲染)。但是view层的数据变化,却不会自动改变model层的数据。这和vue是不同的。
举个例子就是,input框处理用户的输入,react需要监听onchange事件,然后获取用户的输入,将输入内容赋值给model层的变量,这个方向的数据流动是要自己去实现的。而vue只需要一个v-model的api,就可以将变量和用户的输入实现双向绑定,用户输入,变量自动改变,不需要自己去操作react的state:
state就是状态,就是react会去监听的变量。当某个组件的state发生变化时,组件就会重新渲染(其他重新渲染的时机是,props变化,或者父组件重新渲染)。也就是说,一个变量是直接被定义,还是被当做state定义,区别就在于它是否需要被监听,用于重新渲染组件。如果它改变了,但是页面不需要重新渲染,那么他就不用被作为state定义。
useState:
说到了state,原本是只有类组件有的。函数组件本来是无状态组件,但是为了让他能和类组件做到一样的事情,react后面加入了hooks,使得函数组件的功能和类组件一样完备。函数组件的state采用useState定义,返回一个数组,分别是变量和改变变量的方法。特别建议,当state的变量是数组或对象时,改变变量不要直接改变数组或对象元素,而是借助扩展操作符,重新创建一个数组或对象。
useEffect:
这其实是我一开始特别难以理解的一个点。包括我之前是用vue的,面试前背响应式原理,vue3的什么effect看得我云里雾里的,然后react这个hooks的useEffect我看文档也不是很明白。但是后来实际使用就明白了,所谓的effect就是你要去干一件事。就比如,useEffect就是用来,当某个条件到来的时候,你要去做一件事。比如,查询的参数变了,你要去重新向后端查询结果。useEffect的第一个参数是一个函数,就是你要做的那件事。第二个参数是一个数组,里面放着你要监听的变量,如果没有这个参数,则每次组件重新渲染,都会执行这个effect。如果这个参数为空数组,则只在组件第一次挂载的时候执行一次effect。通常情况下,是参数包含的变量发生改变时,effect被执行。
关于组件间状态共享:
最基本的父子组件可以使用props,复杂一点的可以使用redux(后面有空再说吧,公司项目里有用到)。而还有一种方法是context,它可以跨越层级,使得状态不用通过props一层一层的传下去,而是相对于传入context的组件,它的所有子组件都能直接共享状态。