react 入门(二)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>Basic Example</title>
    <!-- react.js是react的核心库-->
    <script src="./build/react.js" charset="utf-8"></script>
    <!-- react-dom.js提供与dom有关的功能-->
    <script src="./build/react-dom.js" charset="utf-8"></script>
    <!-- browser.min.js将JSX语法转换成javascript语法,然后才能在浏览器上执行-->
    <script src="./build/browser.min.js" charset="utf-8"></script>
    <!--<script src="https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.8.24/browser.min.js" charset="utf-8"></script>-->

    <style type="text/css">
        .pStyle{
            font-size: 20px;
        }
    </style>
</head>
<body>
    <!-- react渲染的模板内容会插入到这个DOM节点中,作为一个容器-->
    <div id="container">
    </div>
</body>
<!-- 在react开发中,使用JSX,跟JavaScript语法不兼容,在使用JSX的地方,药设置type="text/babel"-->
<!-- babel转换编译器,ES6转换成可以在浏览器中运行的代码-->
<script type="text/babel">
    /*此处编辑react代码*/
    /*
    003.创建组件类
    创建一个组件类,用于输出"basic react native 变量"
    1.React中创建的组件类以大写字母开头,驼峰命名法
    2.React中使用React.createClass方法创建一个组件类
    3.每个组件类都必须实现自己的render方法,输出定义好的组件模板,返回值:null、false、组件模板
    4.组件类只能包含一个顶层标签
    */
    /*创建组件类React.createClass,参数一般都要有render方法*/
    /*var HelloMessage = React.createClass({
        render: function () {
            return <h1>basic react native 变量</h1>
        }
    });*/
    /*渲染,ReactDOM.render三个参数:渲染内容、插入到哪个DOM节点、渲染后回馈*/
    /*ReactDOM.render(
        <HelloMessage />,
        document.getElementById("container")
    );*/

    /*
    004.React设置组件的样式
    第一种:内敛样式
    第二种:对象样式
    第三种:选择器样式
    在React中和在HTML5中设置样式,书写格式有区别
    1.html5以;结尾  React以,结尾
    2.html5中key和value都不加引号 React中属于JavaScript对象,key的名字不能出现“-”,需要使用驼峰命名法,如果value为字符串,需要加引号
    3.html5中,value如果是数字,需要带单位 React中需要带单位
    注意:在React中使用选择器样式设置组件样式时,属性名class要用className代替,for需要用htmlFor代替
    */
    /*
    var hStyle = {
        backgroundColor:"yellow",
        color:"red"
    }
    var ShowMessage = React.createClass({
        render:function(){
            return (
                <div style={{backgroundColor:"yellow",borderWidth:5,borderColor:"black",borderStyle:"solid"}}>
                    div内敛样式
                    <h1 style={hStyle}>{this.props.firstName}</h1>
                    <p className="pStyle">{this.props.secondName}</p>
                </div>
            );
        }
    });
    ReactDOM.render(
        <ShowMessage firstName="我是h1对象样式" secondName = "我是p选择器样式"/>,
        document.getElementById("container")
    );*/
    /*
    005.复合组件
    组合组件,创建多个组件合成一个组件
    定义一个组件WebShow输出网站名称和网址,其中网站名称使用WebName组件,网址使用WebLink组件
    */
    /*
    var WebName = React.createClass({
        render:function(){
            return <h1>百度</h1>;
        }
    });
    var WebLink = React.createClass({
        render:function(){
            return <a href="http://www.baidu.com">http://www.baidu.com</a>;
        }
    });
    var WebShow = React.createClass({
        render:function(){
            return (
                <div>
                    <WebName />
                    <WebLink />
                </div>
            );
        }
    });
    ReactDOM.render(
        <WebShow />,
        document.getElementById("container")
    );*/
    /*
    006.props
    props是组件自身的属性,一般用于嵌套的内外层组件中,负责传递信息,一般是由父层组件传递给子组件
    props对象中的属性与组件的属性一一对应(children例外),不要直接去修改props中属性的值:
    this.props 对象的属性与组件的属性一一对应,但是有一个例外,就是 this.props.children 属性。它表示组件的所有子节点。

    ...this.props 是props提供的语法糖,可以将父组件中的全部属性全部复制给子组件
    例如:定义一个组件Link(父),其中只包含一个<a>(子),我们不给<a>设置任何属性,所有属性从父组件中复制得到

    this.props.children 组件的所有子节点

    组件类的属性验证 propTypes
    用于验证组件实例的属性是否符合要求

    设置组件属性的默认值,通过实现组件的getDefaultProps方法,对属性设置默认值
    */
    /*
    var WebName = React.createClass({
        render:function(){
            return <h1>{this.props.webName}</h1>;
        }
    });
    var WebLink = React.createClass({
        render:function(){
            return <a href={this.props.webLink}>{this.props.webLink}</a>;
        }
    });
    var WebShow = React.createClass({
        render:function(){
            return (
                <div>
                    <WebName webName={this.props.wName}/>
                    <WebLink webLink={this.props.wLink}/>
                </div>
            );
        }
    });
    ReactDOM.render(
        <WebShow wName="百度" wLink="http://www.baidu.com"/>,
        document.getElementById("container")
    );*/
    /*
    var Link = React.createClass({
        render:function(){
            return <a {...this.props}>{this.props.name}</a>;
        }
    });
    ReactDOM.render(
        <Link name="百度" href="http://www.baidu.com"/>,
        document.getElementById("container")
    );
    */
    /*
                        列表项数量和内容都不确定,在创建模板时才能确定
                        利用this.props.children从父组件获取需要展示的列表项内容
                        获取到列表项内容后,需要遍历children,逐项进行设置
                        使用React.Children.map方法
                        返回值:数组对象,这里数组中的元素是<li>
                        //child是遍历得到的父组件的子节点
    */


    var ListComponent = React.createClass({
        render:function(){
            return (
                <ul>
                    React.Children.map(this.props.children,function(child){
                        return <li>{child}</li>;
                    });
                </ul>
            );
        }
    });
    ReactDOM.render(
        (
            <ListComponent>
                <h1>百度</h1>
                <a href="http://www.baidu.com">http://www.baidu.com</a>
            </ListComponent>
        ),
        document.getElementById("container")
    );


    /*
    var ListComponent = React.createClass({
        propTypes:{
            //验证title的数据类型必须是字符串
            title:React.PropTypes.string.isRequired
        },
        render:function(){
            return <h1>{this.props.title}</h1>;
        }
    });
    ReactDOM.render(
        (
            <ListComponent title="组件类属性验证机制">
            </ListComponent>
        ),
        document.getElementById("container")
    );
    */

    /*
    var ListComponent = React.createClass({
        getDefaultProps:function(){
            //设置属性默认值
            return {title:"设置属性默认值"};
        },
        render:function(){
            return <h1>{this.props.title}</h1>;
        }
    });
    ReactDOM.render(
        (
            <ListComponent>
            </ListComponent>
        ),
        document.getElementById("container")
    );
    */

</script>
</html>
工欲善其事 必先利其器
原文地址:https://www.cnblogs.com/fengyouqi/p/7788671.html