第3节 React 创建组件、绑定属性( 绑定class 绑定style)、引入图片、循环数组渲染数据2019-05-11

1、创建组件

1.1注意事项

(1)所有的模板要被一个根节点包含起来;
(2)模板元素不要加引号;
(3)组件名称首字母大写、组件类名称首字母大写;
(4)组件的构造函数中一定要注意 super
子类必须在constructor方法中调用super方法,否则新建实例时会报错。这是因为子类没有自己的this对象,而是继承父类的this对象,然后对其进行加工。如果不调用super方法,子类就得不到this对象。

constructor(props){
        super(props);  /*用于父子组件传值  固定写法*/
        this.state={
            userinfo:'张三'
        }
}

1.2定义组件

import React from 'react';
class 组件名称 extends React.Component{
    //子类必须在constructor方法中调用supper方法,否则会在新建实例时会报错,这是因为子类没有自己的this对象,而是继承父类的this对象。
    constructor(props){
        super(props);
        this.state={
           msg:'Hello Word!'
        }
    }

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

}
export default 组件名称;

2、绑定数据

通过{}绑定数据

(1)在构造函数中定义数据

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

(2)在模板中获取绑定数据

 {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)模板中调用

<img src={imgUrl} />

4.2通过ES6语法require

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

5、循环数组并渲染数据

(1)构造函数中定义数据

//构造函数
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)模板中调用数据

render(){
    let lNews=this.state.list1.map(function (values,index){
         return <li key={index}>{values}</li>
    })
    return(
        <div>
             {/* 第一种方式,通过定义变量的方式*/}
             <ul>
                {lNews}
            </ul>
            <br/>
            {/* 第二种方式:数组中有标签元素,直接通过this.state调用*/}
            <ul>
                {this.state.list2}
            </ul>
            <br/>
            {/* 第三种方式:调用对象的方式*/}
            <ul>
                {
                    this.state.list3.map(function (value,index) {
                         return(<li key={index}>{value.title}</li>)
                    })
                }
            </ul>
        </div>
    )
}

6、完整DEMO示例

6.1绑定数据、绑定属性

 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方法中调用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'}}>行内样式1</div>
                <div style={this.state.style}>行内样式2</div>
            </div>
        )
    }

}
export default Lesson03;//导出组件

6.2绑定图片、循环数组

import React from 'react';
import imgUrl from '../assets/images/03.jpg';
import "../assets/css/index.css";
//定义组件
class News extends  React.Component{
    //构造函数
    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; //导出组件
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,186评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,858评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,620评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,888评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,009评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,149评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,204评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,956评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,385评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,698评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,863评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,544评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,185评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,899评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,141评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,684评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,750评论 2 351

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,094评论 1 32
  • 作为一个合格的开发者,不要只满足于编写了可以运行的代码。而要了解代码背后的工作原理;不要只满足于自己的程序...
    六个周阅读 8,433评论 1 33
  • 一、基础知识:1、JVM、JRE和JDK的区别:JVM(Java Virtual Machine):java虚拟机...
    杀小贼阅读 2,373评论 0 4
  • 这是16年5月份编辑的一份比较杂乱适合自己观看的学习记录文档,今天18年5月份再次想写文章,发现简书还为我保存起的...
    Jenaral阅读 2,739评论 2 9
  • 文图/李根勇 今天,机缘巧合,元宵节十中国的情人节十雨水,一日可谓三节,令人欣然,国人逢盛世,佳节号长春。 正月十...
    李根勇阅读 429评论 0 2