第3節(jié) React 創(chuàng)建組件、綁定屬性( 綁定class 綁定style)、引入圖片、循環(huán)數(shù)組渲染數(shù)據(jù)2019-05-11

1、創(chuàng)建組件

1.1注意事項

(1)所有的模板要被一個根節(jié)點包含起來;
(2)模板元素不要加引號;
(3)組件名稱首字母大寫、組件類名稱首字母大寫;
(4)組件的構(gòu)造函數(shù)中一定要注意 super
子類必須在constructor方法中調(diào)用super方法,否則新建實例時會報錯。這是因為子類沒有自己的this對象,而是繼承父類的this對象,然后對其進行加工。如果不調(diào)用super方法,子類就得不到this對象。

constructor(props){
        super(props);  /*用于父子組件傳值  固定寫法*/
        this.state={
            userinfo:'張三'
        }
}

1.2定義組件

import React from 'react';
class 組件名稱 extends React.Component{
    //子類必須在constructor方法中調(diào)用supper方法,否則會在新建實例時會報錯,這是因為子類沒有自己的this對象,而是繼承父類的this對象。
    constructor(props){
        super(props);
        this.state={
           msg:'Hello Word!'
        }
    }

    render(){
        return (
            <div>
                <div>{this.state.msg}</div>
            </div>
        )
    }

}
export default 組件名稱;

2、綁定數(shù)據(jù)

通過{}綁定數(shù)據(jù)

(1)在構(gòu)造函數(shù)中定義數(shù)據(jù)

this.state={
    msg:'Hello Word!'
}

(2)在模板中獲取綁定數(shù)據(jù)

 {this.state.msg}

3、綁定屬性

(1)class 要變成 className
(2)for 要變成 htmlFor
(3)style屬性和以前的寫法有些不一樣

<div style={{'color':this.state.color}}>{this.state.title}</div>

4、引入圖片

4.1通過import的方式引入圖片

(1)引入圖片

import imgUrl from '../assets/images/03.jpg'; 

(2)模板中調(diào)用

<img src={imgUrl} />

4.2通過ES6語法require

<img src={require("../assets/images/03.jpg")} />

5、循環(huán)數(shù)組并渲染數(shù)據(jù)

(1)構(gòu)造函數(shù)中定義數(shù)據(jù)

//構(gòu)造函數(shù)
constructor(props){
    super(props);
    this.state={
        list1:['學習React.js','學習Vue.js','學習SpringBoot'],
        list2:[<li key='1'>學習SpringMVC</li>,<li key='2'>學習SpringCloud</li>,<li key='3'>學習SpringBoot</li>],
        list3:[
            {title:'時政新聞'},
            {title:'娛樂新聞'},
           {title:'軍事新聞'}
        ]
    }
}

(2)模板中調(diào)用數(shù)據(jù)

render(){
    let lNews=this.state.list1.map(function (values,index){
         return <li key={index}>{values}</li>
    })
    return(
        <div>
             {/* 第一種方式,通過定義變量的方式*/}
             <ul>
                {lNews}
            </ul>
            <br/>
            {/* 第二種方式:數(shù)組中有標簽元素,直接通過this.state調(diào)用*/}
            <ul>
                {this.state.list2}
            </ul>
            <br/>
            {/* 第三種方式:調(diào)用對象的方式*/}
            <ul>
                {
                    this.state.list3.map(function (value,index) {
                         return(<li key={index}>{value.title}</li>)
                    })
                }
            </ul>
        </div>
    )
}

6、完整DEMO示例

6.1綁定數(shù)據(jù)、綁定屬性

 import React from 'react';
import '../assets/css/index.css';

/*
* 綁定屬性要注意
*   (1)class換成className
*   (2)for要換成htmlFor
*    (3) style屬性和以前的寫法有些不一樣
          <div style={{'color':'blue'}}>{this.state.title}</div>
        <div style={{'color':this.state.color}}>{this.state.title}</div>
* */
class Lesson03 extends React.Component{

    //子類必須在constructor方法中調(diào)用supper方法,否則會在新建實例時會報錯,這是因為子類沒有自己的this對象,而是繼承父類的this對象。
    constructor(props){
        super(props);
        this.state={
           msg:'Hello Word!',
           title:'我是一個title',
           color:'divred',//定義樣式
           style:{
               color:'red',
               fontSize:'18px'
            }
        }
    }

    render(){
        return (
            <div>
                <div>{this.state.msg}</div>
                <div title={this.state.title}>我是一個DIV</div>
                <div className="divred">我是一個紅色的DIV</div>
                <div className={this.state.color}>我是一個紅色的DIV2</div>
                <div style={{color:'red'}}>行內(nèi)樣式1</div>
                <div style={this.state.style}>行內(nèi)樣式2</div>
            </div>
        )
    }

}
export default Lesson03;//導出組件

6.2綁定圖片、循環(huán)數(shù)組

import React from 'react';
import imgUrl from '../assets/images/03.jpg';
import "../assets/css/index.css";
//定義組件
class News extends  React.Component{
    //構(gòu)造函數(shù)
    constructor(props){
        super(props);
        this.state={
            msg:'你好世界,我是一個新聞組件',
            imgAlt:"這是一個圖片",
            list:['學習React.js','學習Vue.js','學習SpringBoot'],
            list2:[<li key='1'>學習SpringMVC</li>,<li key='2'>學習SpringCloud</li>,<li key='3'>學習SpringBoot</li>],
            list3:[
                {title:'時政新聞'},
                {title:'娛樂新聞'},
                {title:'軍事新聞'}
            ]
        }
    }

    render(){
        let lNews=this.state.list.map(function (values,index){
             return <li key={index}>{values}</li>
        })
        return(
            <div>
                <div>{this.state.msg}</div>

                {/* 第一種方式:通過import的方式引入*/}
                <img src={imgUrl} title={this.state.imgAlt} style={{'width':'500px'}}/>

                {/* 第二種方式:通過ES6的語法方式進行圖片的引入 require */}
                <img src={require("../assets/images/03.jpg")} title={this.state.imgAlt} style={{'width':'500px'}}/>
                <br/>
                    <ul>
                        {lNews}
                    </ul>
                <br/>
                <ul>
                    {this.state.list2}
                </ul>
                <br/>
                <ul>
                    {
                        this.state.list3.map(function (value,index) {
                             return(<li key={index}>{value.title}</li>)
                        })
                    }
                </ul>
            </div>
        )

    }
}
export default  News; //導出組件
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容