• React组件


    一、函数式组件

    ①无状态的函数式组件

        <div id="app"></div>
        <script src="node_modules/@babel/standalone/babel.js"></script>
        <script src="node_modules/react/umd/react.development.js"></script>
        <script src="node_modules/react-dom/umd/react-dom.development.js"></script>
        <script type="text/babel">
            //组件的名字首字母大写
            // 这种函数式组件也是无状态的 
            function AppHeader() {
                return (
                    <div className="header">
                        <h2>头部部分</h2>
                    </div>
                )
            }
            function AppContent() {
                return (
                    <div className="content">
                        <h3>中间内容部分</h3>
                    </div>
                )
            }
            function AppFooter() {
                return (
                    <div className="footer">
                        <h2>尾部部分</h2>
                    </div>
                )
            }
            const element = (
                <div>
                    <AppHeader />
                    <AppContent />
                    <AppFooter />
                </div>
            )
            ReactDOM.render(element,document.getElementById('app'))

    ②有参数的函数式组件

        <div id="app"></div>
        <script src="node_modules/@babel/standalone/babel.js"></script>
        <script src="node_modules/react/umd/react.development.js"></script>
        <script src="node_modules/react-dom/umd/react-dom.development.js"></script>
        <script type="text/babel">
            //组件的名字首字母大写
            // 这种函数式组件也是无状态的 
            function Welcome(props) {
                return <h2>hello {props.name}</h2>
            }
            
            const element = (
                <div>
                    <Welcome name='eric' />
                    <Welcome name='jack' />
                    <Welcome name='lisa' />
                </div>
            )
            ReactDOM.render(element,document.getElementById('app'))
        </script>

    二、类方式组件

    ①基本的类方式组件

        <div id="app"></div>
        <script src="node_modules/@babel/standalone/babel.js"></script>
        <script src="node_modules/react/umd/react.development.js"></script>
        <script src="node_modules/react-dom/umd/react-dom.development.js"></script>
        <script type="text/babel">
            //class组件类,必须继承自React.Component才是一个组件类,否则就是一个普通的类
            // class组件类,必须通过render函数返回组件模板
            class MyComponent extends React.Component{
                render(){
                    return(
                        <div>
                            <h2>Component</h2>
                        </div>
                    )
                }
            }
            
            const element = (
                <div>
                    <MyComponent />
                    <MyComponent></MyComponent>
                </div>
            )
            ReactDOM.render(element,document.getElementById('app'))
        </script>

    ②有状态的类方式组件

        <div id="app"></div>
        <script src="node_modules/@babel/standalone/babel.js"></script>
        <script src="node_modules/react/umd/react.development.js"></script>
        <script src="node_modules/react-dom/umd/react-dom.development.js"></script>
        <script type="text/babel">
            //如果子类加入了构造函数 constructor,则一定要手动调用父类的构造函数super()
            // React 组件需要通过手动为组件添加state成员来初始化:ViewModel
            // state等价于Vue中的data,接下来就可以在该组件管理的模板中通过{}来访问绑定数据
            // handleClick方法里面的this默认是window,而不是实例对象,需要通过方法改变这个this的指向
            // 需要修改state里的数据并且希望视图更新,则一定要使用this.setState方法
            class MyComponent extends React.Component{
                constructor(props) {
                    super(props);
                    this.state = {
                        message:'hello world'
                    }
                }
                render(){
                    return(
                        <div>
                            <h2>{this.state.message}</h2>
                            <h2>{this.state.message}</h2>
                            <h2>{this.state.message}</h2>
                            <button onClick={this.handleClick.bind(this)}>点击改变message</button>
                        </div>
                    )
                }
                handleClick(){
                    this.setState({
                        message:'good job'
                    })
                }
            }
            
            const element = (
                <div>
                    <MyComponent />
                </div>
            )
            ReactDOM.render(element,document.getElementById('app'))
        </script>

    三、事件绑定的this指向问题

    ①第一种绑定方式,this指向的是window,默认接收一个参数event(事件源对象),不接收额外的参数

    ②第二种绑定方式,使用bind,默认接收一个参数参数event(事件源对象),支持接收额外的参数,手动传递的参数会放到函数的最前面,event会作为函数的最后一个参数

    ③第三种绑定方式,使用箭头函数,自动bind(this),支持接收额外的参数,手动传递的参数会放到函数的最前面,event会作为函数的最后一个参数

       <div id="app"></div>
        <script src="node_modules/@babel/standalone/babel.js"></script>
        <script src="node_modules/react/umd/react.development.js"></script>
        <script src="node_modules/react-dom/umd/react-dom.development.js"></script>
        <script type="text/babel">
            class MyComponent extends React.Component{
                constructor(props) {
                    super(props);
                    this.state = {
                        message:'hello world'
                    }
                }
                render(){
                    return(
                        <div>
                            <h2>{this.state.message}</h2>
                            <h2>{this.state.message}</h2>
                            <h2>{this.state.message}</h2>
                            <button onClick={()=>{this.handleClick()}}>点击改变message</button>
                        </div>
                    )
                }
                handleClick(){
                    this.setState({
                        message:'good job'
                    })
                }
            }
            
            const element = (
                <div>
                    <MyComponent />
                </div>
            )
            ReactDOM.render(element,document.getElementById('app'))
        </script>

    ④补充:bind的用法

        <script>
            function fn(a,b,c,d,e,f){
                console.log(a,b,c);
                console.log(d,e,f);
            }
            // 绑定的同时传递参数,预传参,不调用
            var newFn = fn.bind(this,1,2,3)
            // 调用的时候传递参数,该参数会和预传递的参数合并到一起作为函数参数
            newFn() //1 2 3 undefined undefined undefined
            newFn(4,5,6) // 1 2 3  4 5 6
        </script>
  • 相关阅读:
    建造者模式5(7)
    抽象工厂模式4(6)
    工厂方法模式3(5)
    jxl导出excel(2)
    jxl导入excel(1)
    java8新特性字符串转LocalDateTime转Date(6)
    极光推送java服务端-通知(2)
    极光推送java服务端-通知(1)
    SpringCloud微服务之Ribbon负载均衡(一)
    cenos7搭建gitlab
  • 原文地址:https://www.cnblogs.com/EricZLin/p/9436537.html
Copyright © 2020-2023  润新知