Facebook团队对社区上的MVC框架都不太称心的状况下,开发了一套开源的前端框架react,于2013年公布第一个版本。
react最开始提倡函数式编程,应用function以及外部办法React.creactClass创立组件,之后在ES6推出之后,应用类组件Class构建蕴含生命周期的组件。
- react 16.8版本更新
react16.8版本更新标志性的信息,是引入了hooks以及相干的一些api。
useState:// 函数式组件初始化state和更改state:const Counter = () =>{const [num,setNum] = userState(0);return( <div> <div>{count}</div> <button onClick={()=>setCount(num+ 1)}>+</button> </div> );};
- useEffect
userEffect副作用函数的组件,不仅取代了组件初始化,组件挂载胜利,组件状态更新这三个阶段的生命周期函数
同时还能在这个阶段解决一些内存队列:包含定时器等,解决了在16.8版本之前,在组件移除之后,异步队列没有被移除,占据内存导致页面卡顿等问题
useEffect(() => { compoment.subscribe(id); return () => { compoment.unsubscribe(theId) //勾销订阅 }});
- react16.8版本更新解决了什么问题
- 组件复用更便捷
在更新的版本之前,复用组件,更多的是应用高阶组件,以及封装的组件,通过传参和父子组件通信的模式去复用,
更新之后,能够通过函数式组件返回状态的模式,去承受组件向外裸露的组件内容。
实例
//旧版本function children() { return function (WrappedComponent) { return class HighComponent extends React.Component { state = { childProps: xxx }; render() { const { childProps } = this.state; return <WrappedComponent childProps={childProps} />; } }; };}
class App extends Component{ render(){/** * 调用高阶组件 */ const { childProps} = this.props; return ( <children columns={[...]} // tableProps蕴含pagination, onChange, dataSource等属性。 {...childProps} /> ) }}
// 新版本function children() { const [childProps, setChildProps] = useState(xxx); return childProps;}function App { const { childProps} = useTable(); return ( <Table columns={[...]} // tableProps蕴含pagination, onChange, dataSource等属性 {...childProps} /> )}
- 在咱们下面提到的,革除定时器,以及解决在生命周期变动过程中,打消占用内存的队列等
- 函数式组件呈现了状态治理,在以往的react函数式编程过程中,react只能被动去接管一个从父组件传递下来的一个props状态,在hooks更新之后,能够应用hooks更新的办法,进步组件的功能性以及扩展性,在函数式组件当中领有了像class组件一样可控生命周期
- useEffect取代了一部分生命周期函数,从代码量的角度来说,简化了代码,解决了在class组件在编写过程中,须要一直应用bind或者箭头函数去绑定以后的this,更专一于以后状态的治理
- hooks和react diff算法
- react diff这里不做深刻解说,简略来说diff算法是react以及vue2.0版本当中:
外部有一套虚构dom的算法,在组件渲染过程中,对每个dom渲染一个key值,
在state状态更新过程时,对应渲染的虚构dom会去比照实在渲染在页面上的dom元素,如果某个节点比照时发现有更改,对应更改以后虚构dom节点的数据状态,再渲染实在的dom到页面当中。
两者的分割:
- hooks在更新之后,缩小了对生命周期函数的执行,同时更新状态更为迅速,这样在虚构dom执行过程中,进步diff执行速度
- hooks使得函数式组件有了本人外部的状态,在函数式组件执行过程中,不须要期待装载到父组件当中,本人能够更新状态,所以缩小了局部dom的深度,在页面渲染过程中,也算是变相进步了页面渲染速度。
总结
hooks在呈现之后,对react前端开发来说,标志性的特点应该是解决了相似定时器队列占据内存的问题,简化了react生命周期和组件代码,追溯数据流向和状态批改更为清晰。
在16.8版本之后的小版本更是呈现了自定义hooks,还有usememo等api,
蕴含vue3.0新的api,这些版本的更新都在帮忙前端开发者不必再花更多的工夫去钻研生命周期执行和运行的过程,去专一页面上状态的扭转,疾速和持重开发前端业务。
文章集体博客地址:react 16.8版本新个性以及对react开发的影响