zoukankan      html  css  js  c++  java
  • react之组件

    组件的种类

    1. DOM元素组件:全部小写,比如<vvv>这是一个标签</vvv>;
    2. 自定义组件:首字母大写,比如<People/>

    如何得到一个自定义组件?

    1. 使用函数声明
    function People() {
    	return (
    		<div className="people">
    		<h1>我是people</h1>
    		<p>你好,people</p>
    		</div>
    	);
    };
    
    1. 使用类声明
    class Men extends React.Component {
    	render() {
    		return (
    			<div className="men">
    			<h1>我是men</h1>
    			<p>你好,men</p>
    			</div>
    		);
    	}
    }
    
    • 组件之间可以相互嵌套;
    • 将每个组件放入单独的js文件中,用的时候直接导入即可;
    • 在自定义属性里面可以写一些属性,接上一些值;
    • 在函数组件里面,通过第一个参数来接受props;
    • 在类组件中,通过组件实例下面的props;
    • 数据总是从顶层流向底层:单向数据流;
    • 在页面上渲染null,{null},不会有任何表现,就是空的;

    children

    自定义的标签写的内容就是props.children

    defaultProps

    当自定义标签没有传入该属性或传入的该属性值为undefined时启用。
    语法(跳出类和函数体,在外面写):

    People.defaultProps = {
    	name: '-------',
    	age: 20,
    	rP: f=>f
    };
    

    prop-types

    限制传入的属性的值的种类。
    语法(和跳出类和函数体,在外面写):

    //先要导入一个东西
    import PT from 'prop-types'
    //......
    People.propTypes = {
    //还可以验证 array bool object symbol node 
    //node 就是可以渲染的东西,包括:element、string、number、[node]
    	name: PT.string,
    	rP: PT.func,
    	age: PT.number.isRequired
    };
    

    State

    只有类组件才有状态!

    setState

    流程:

    1. 更新this.state的值;
    2. render方法再次执行,生成新的virtual DOM结构;
    3. 比较新旧virtual DOM,对变化的部分,更新浏览器中相应的DOM;
    • 在类组件里构造函数中,如果要访问props属性,需要向constructor函数传一个props参数,向super函数也传一个props参数,接下来你既可以使用props也可以使用this.props

    合并更新

    一个事件循环里,会将所有的this.setState合并,只调用一次render函数;

    异步更新

    在render函数没结束前,this.state.XXXX永远表示上一个状态。要等render结束后才会更新状态。

    如何在render里访问新的state?

    <button onClick = {()=>{
    				this.setState({
    					name: 'tweety',
    					number: ++number
    				});
    				
    				this.setState((newState,props)=>{
    //通过这个newState就可以访问新的state了。
    					console.log(newState);
    					return{
    						name:'Flora',
    						number:newState.number === 2 ? 2:0
    					};
    				});
    			}}>change number</button>
    
  • 相关阅读:
    Android MediaPlayer
    MediaPlayer基本使用方式
    css 透明度 一句话搞定透明背景!
    CSS ZOOM 作用[IE6下清除浮动]
    document.execcommand方法
    让position:fixed在IE6下可用
    CSS文档流与块级元素(block)内联元素(inline)那点事
    Android屏幕分辨率详解(VGA、HVGA、QVGA、WVGA、WQVGA)
    重载的乐趣
    线程间调用不同线程创建的控件
  • 原文地址:https://www.cnblogs.com/endymion/p/9316773.html
Copyright © 2011-2022 走看看