《深入react技术栈》学习笔记(二)初入React世界
前言上一篇文章中,我们讲到了JSX的一些用法和注意事项,这次我们来讲react中最基础也是特别重要的内容:组件。这篇文章包含组件的以下内容:状态、属性、生命周期。 正文一.组件演变W3C标准委员会制定的规范:Web Components.每个自定义组件可以定义自己对外提供的属性、方法、还有事件。,内部可以像写一个页面一样,专注于实现功能来完成对组件的封装。 二.React组件的构建React的本质就是关心元素的构成,React组件即为组件元素。组件元素被描述为纯粹的JSON对象,意味着可以使用方法和类来构建。React组件基本上有三部分组成: 属性、状态和生命周期方法。
React组件可以接收参数,也可能有自身状态。一旦接收到的参数或者自身状态有所改变,React组件就会执行相应的生命周期方法,最后渲染。 React组件的构建方法 const Button = React.createClass({ getDefaultProps(){ return{ color:'blue',text:'confirm' }; },render(){ const {color,text} = this.props; return( <button className={'btn btn-${color}'}> <em>{text}</em> </button> ); } }); (2)ES6 Classes import React,{Component} from 'react' class Button extends Component{ constructor(props){ super(props); } static defaultProps = { color:'blue',text:'confirm' } render(){ return ( <button className={'btn btn-${color}'}> <em>{text}</em> </button> ); } } (3)无状态组件 function Button({ color:'blue',text:'confirm' }){ return ( <button className = {'btn btn-${color}'}> <em>{text}</em> </button> ); }; 注意事项: 三.React数据流1.简单介绍: 2.state 3.prop 子组件prop: propTypes: 4.prop与state的区别 官方文档中已经给出了怎样判断数据是否应为组件的state的方法: 进一步探索,参考文档Working with Data in React: Properties & State props 是组件的输入值,主要用来初始化组件的state和渲染组件。实例化组件后,props是不可变的。props只能在组件实例化的时候,设置值。因此,当组件re-rendered的时候,react会比较new和old props 来决定哪些DOM需要更新。 state 表示由组件更改的数据,通常是通过与用户的交互来更改的。为了实现state的修改,需要注册事件处理程序到相应的DOM元素上。当事件发生时,将更新后的值是从DOM中检索,并通知组件。在组件可以使用state,组件必须通过getInitialState函数初始化。通常情况下,该getInitialState函数初始化状态使用static value,props,或其他数据存储。 总结: 四.组件生命周期
1.组件的挂载 import React,{Component,PropTypes} from 'react' class App extends React.Component{ static propTypes{ //... }; static defaultProps={ //... }; constructor(props){ super(props); this.state={ //... }; } componentWillMount(){ //... } componentDidMount(){ //... } render(){ <div>this is a demo </div> } } getDefaultProps: getInitialState: componentWillMount: render: componentDidMount: 2.组件的卸载 componentWillUnmount: 3.数据更新过程 数据更新指的是父组件向下传递props或许组件自身执行setState方法时发生的一系列更新动作。 class App extends React.Component{ componentWillReceiveProps(nextProps){ //this.setSate({}) } shouldComponentUpdate(nextProps,nextSate){ //return true } componentWillupdate(preProps,preSate){ //... } componentDidUpdate(){ //... } render(){ return( <div>this is a demo </div> ) } } componentWillReceiveProps: shouldComponentUpdate: componentWillUpdate: componentDidUpdate: 五.组件设计原则详细请见:https://github.com/react-comp...(1)职责清晰多个组件协同完成一件事情,而不是一个组件替其他组件完成本该它自己完成的事情。(2)扁平访问组件推荐使用状态来控制交互和显示,如果需要显示访问,也尽量实行扁平访问,即只可以调用其 children 的方法。(3)信息冗余尽量避免信息冗余,如果某个 state 可以由其他 state 计算得到,那么就删除这个 state(4)api 尽量和已知概念保持一致如果 api 可以和已知概念保持一致,那么就用已知的 api(5)使用标签嵌套尽量使用标签嵌套而不是属性配置。(6)避免使用 ref使用父组件的 state 控制子组件的状态而不是直接通过 ref 操作子组件 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |