• react笔记汇总


    1.什么是React?       

    a.React 是一个用于构建用户界面的 JAVASCRIPT 库。

    b.React主要用于构建UI,很多人认为 React 是 MVC 中的 V。

    c.React 起源于 Facebook 的内部项目,用来架设 Instagram 的网站,并于 2013 年 5 月开源。

    d. React 拥有较高的性能,代码逻辑非常简单,越来越多的人已开始关注和使用它。

    2.JSX语法:JavaScript+XML

    基本方法:React.render(填入元素的html代码, 指定的元素)

    使用JSX语法:javaScript+XML有以下几个优点:

    a. JSX 执行更快,因为它在编译为 JavaScript 代码后进行了优化

    b.它是类型安全的,在编译过程中就能发现错误

    c. 使用 JSX 编写模板更加简单快速

    例子:

    ReactDOM.render(

    <h1>Hello, world!</h1>,

    document.getElementById('example')

    );

    我们可以在以上代码中嵌套多个 HTML 标签,需要使用一个 div 元素包裹它(必须使用一个根元素),实例中的 p 元素添加了自定义属性 data-myattribute,添加自定义属性需要使用 data- 前缀。

     注意:例子中的代码也可以独立写在一个js文件中,可以通过script标签引入,效果是一样的

    d.react表达式,.在JSX中可以使用javascript表达式,表达式写在{}中

    例子:

    ReactDOM.render(

    <h1>{1+1}</h1>,

    document.getElementById('example')

    );

    注意:在 JSX 中不能使用 if else 语句,但可以使用 conditional (三元运算) 表达式来替代。

    e.react样式, React 推荐使用内联样式。我们可以使用 camelCase 语法来设置内联样式. React 会在指定元素数字后自动添加 px 。

    例子:

    var myStyle = { fontSize: 100, color: '#FF0000' };

    ReactDOM.render(

    <h1 style = {myStyle}>LeoX笔记</h1>,

    document.getElementById('example')

    );

    注意:style属性名须用camelCase命名法书写。如background-color须写为backgroundColor

    f.注释, 注释需要写在花括号中

    例子:

    ReactDOM.render(

    //注释

    /*注释*/

    <div>

    <h1>菜鸟教程</h1>

    {/*注释...*/}

    </div>,

    document.getElementById('example')

    );

    注意:在根元素中的注释须加大括号,但是在根元素以外的注释,不可加大括号,单行注释和多行注释都是支持的。

    g.数组,JSX 允许在模板中插入数组,数组会自动展开所有成员

    例子:

    var arr = [ <h1>第一行</h1>, <h2>第二行</h2>, ];

    ReactDOM.render(

    <div>{arr}</div>,

    document.getElementById('example')

    );

    注意:展开的数组元素须自带标签或者是字符串。

    注意:由于 JSX 就是 JavaScript,一些标识符像 class 和 for 不建议作为 XML 属性名。作为替代,React DOM 使用 className 和 htmlFor 来做对应的属性。

    注意:代码中嵌套多个 HTML 标签,需要使用一个标签元素包裹它

    3.组件

    定义组件使得我们的应用更容易来管理

    定义组件使得我们的应用更容易来管理

    把自定义组件当作普通标签使用,直接一个单标签即可

    组件定义方法:

    A.React.createClass 方法用于生成一个组件类

    B.如果我们需要向组件传递参数,可用 this.props 对象;对象的属性不要使用保留字

    C.组件名称第一个字母大写

    例子:

    var HelloMessage = React.createClass({ //React.createClass 方法用于生成一个组件类 HelloMessage

    render: function() {

    return <h1>Hello World!</h1>;

    }

    });

    ReactDOM.render(

    <HelloMessage />,// <HelloMessage /> 实例组件类并输出信息。

     document.getElementById('example')

    );

    注意:原生 HTML 元素名以小写字母开头,而自定义的 React 类名以大写字母开头,比如 HelloMessage 不能写成 helloMessage。除此之外还需要注意组件类只能包含一个顶层标签,否则也会报错。

    4.如果我们需要向组件传递参数,可以使用 this.props 对象

    例子:

    var HelloMessage = React.createClass({

    render: function() {

    return <h1>Hello {this.props.name}</h1>;

    }

    });

    ReactDOM.render(

    <HelloMessage name="Runoob" />,

    document.getElementById('example')

    );

    注意:例子中的this指向当前所在的组件,就是后面使用的标签。

    注意,在添加属性时, class 属性需要写成 className ,for 属性需要写成 htmlFor ,这是因为 class 和 for 是 JavaScript 的保留字。

    5.复合组件

    我们可以通过创建多个组件来合成一个组件,即把组件的不同功能点进行分离。

    var WebSite = React.createClass({

    render: function() {

    return (

    <div>

    <Name name={this.props.name} />

    <Link site={this.props.site} />

    </div> );

    }

    });

    var Name = React.createClass({

    render: function() {

    return (

    <h1>{this.props.name}</h1>

    );

    }

    });

    var Link = React.createClass({

    render: function() {

    return (

    <a href={this.props.site}> {this.props.site} </a>

    );

    }

    });

    ReactDOM.render(

    <WebSite name="百度一下 " site=" http://www.baidu.com" />, document.getElementById('example')

    );

    总结:在组件里使用其他组件的标签,就是复合组件

    注意:组件名不一定是用单标签,也可以是双标签

    6.自定义方法

    A.绑定事件需要把事件名的首字母大写:onClick;

    B.事件处理函数支持event对象;

    C.组件中的事件处理函数只能在当前组件中使用,外面的组件无法使用,并且每个函数都需要单独定义。

    例子:

    let MyCom = React.createClass({

            render:function(){

                let name =  this.props.name;

                return  (

                    <b onClick={this.getMyName.bind(this)} id="myid">

                        {this.props.name}

                    </b>

                );

            },

            getMyName:function(a){

                console.log(event.target);

                d.target.innerHTML = this.props.name;

                this.props.name = '张三';

                console.log(this.props.name);

            }

        });

       

        ReactDOM.render(

            <MyCom name="LeoX"></MyCom>,

            document.querySelector('.mydiv')

        );

    7.属性和默认属性

    getDefaultProps();//设置默认属性

    例子:

        let School = React.createClass({

                render:function(){

                    return (<div>

                                <SchoolInfo name={this.props.schoolname}    m={this.props.m} />,

                                <StuInfo    name={this.props.name}          sex={this.props.sex} /> 

                            </div>);

                }

        });

        let SchoolInfo = React.createClass({

            render:function(){

                console.log(this.props);

                return <b>学校:{this.props.name},<Major m={this.props.m} /></b>;

            }

        });

        let Major = React.createClass({

            render:function(){

                console.log(this.props)

                return <b>专业:{this.props.major[this.props.m]}</b>;

            },

            getDefaultProps:function(){

                return {

                    major:['', '计算机科学与技术', '物联网', '信息技术']

                };

            }

        });

        let StuInfo = React.createClass({

            render:function(){

                return <b>姓名:{this.props.name},性别:{this.props.sex == 1 ?'男':'女'}</b>;

            }

        });

        let stuinfo = [

            {schoolname:"复旦", name:"张三", sex:"1", m:1},{schoolname:"清华", name:"李四", sex:"2", m:2},{schoolname:"北大", name:"王五", sex:"1", m:3}

        ];

       

        let stulist = [];

        for (var i = 0; i < stuinfo.length; i++) {

            stulist.push(<School schoolname={stuinfo[i].schoolname} name={stuinfo[i].name} sex={stuinfo[i].sex} m={stuinfo[i].m} />);

        }

        ReactDOM.render(

            <span>{stulist}</span>,

            document.querySelector('.mydiv')

    );

    注意:如果外部传入属性与内部默认属性重名了,即发生冲突了,默认属性会被外部传入同名属性覆盖,如果不同名则会被合并,都可以用this.props.+name调用。且属性不可更改,因为更改以后页面未被重新渲染,无任何效果,所以认定为无法更改,其实是可以更改,只不过没效果。

    8.状态和属性

    A.状态的值在修改的时候,组件会重新渲染;

    B.修改状态需要使用this.setState()来设置状态值;

    C. getInitialState()设置默认状态值,使用this.state.+name调用

    D.this.setState()来设置改变的状态值,未改变的状态值可不设置。这个方法调用会重新渲染页面。

    setState(object nextState[, function callback])

    • nextState,将要设置的新状态,该状态会和当前的state合并
      • 不能在组件内部通过this.state修改状态,因为该状态会在调用setState()后被替换。
      • setState()并不会立即改变this.state,而是创建一个即将处理的state。setState()并不一定是同步的,为了提升性能React会批量执行state和DOM渲染。
      • setState()总是会触发一次组件重绘,除非在shouldComponentUpdate()中实现了一些条件渲染逻辑。
    • callback,可选参数,回调函数。该函数会在setState设置成功,且组件重新渲染后调用。

    例子:

    html:<div id="date"></div>

        <div class="mydiv">这里是一个盒子</div>

    js:

    document.querySelector('#date').innerHTML = new Date();

        let Major = React.createClass({

            render:function(){

                return  <span>

                            专业:<b>{this.props.major[this.state.age]}</b>,设置:{this.state.age}年--

                            <button onClick={this.addAge}>增加一年</button>

                            <em>{this.state.username}</em>

                        </span>;

            },

            getDefaultProps:function(){

                return {

                    major:['', '计算机科学与技术', '物联网', '信息技术']

                };

            },

            getInitialState:function(){

                return {

                    age:1,

                    username:'小明'

                };

            },

            addAge:function(){

                this.props.major = [];

                this.setState({age:++this.state.age, username:'小红'});

                console.log(this.state.age);

            }

        });

        ReactDOM.render(

            <Major m='1'/>,

            document.querySelector('.mydiv')

        );

  • 相关阅读:
    Sqlserver 迁移数据库批量迁移作业(Job)
    在VS2010开发的MVC3 应用程序中设定默认的浏览器
    创建继承自System.Web.UI.WebControls.WebControl基类的控件类
    遍历页面控件
    @fontface
    加密配置节点
    视图状态的程序分块
    BlogEngine.NET 1.5的BlogProvider、DbBlogProvider
    避免target特性
    SCOPE_IDENTITY、IDENT_CURRENT 、@@IDENTITY
  • 原文地址:https://www.cnblogs.com/LeoXnote/p/8534937.html
Copyright © 2020-2023  润新知