React第二天学习

内容:props、状态机、事件、
     组件通信、模拟表单双向绑定

一、组件的props

1.类组件

定义:

import React from 'react'
class Home extends React.Component{
    constructor(){
        super();
        console.log("构造函数先执行")
    }
    //渲染页面的钩子函数
    render(){
        console.log("渲染函数执行")
        return(
            <div>
                <h2>这是一个es6类定义的组件</h2>
            </div>
        )
    }
}
export default Home;

拥有构造函数等生命周期函数(业务组件/状态组件)

类组件中可以定义很多个函数、初始数据等,通过this.props接收父组件传递的数据

2.函数组件

定义:

import React from 'react'
var Movie = (props)=>{
    return(
        <div>
            <h3>这是一个函数式组件</h3>
        </div>
    )
}
export default Movie;

它没有生命周期等函数(无状态组件/木偶组件)、没有状态机。

函数组件要接收父组件传递的数据需要通过函数的形参来接收。

二、状态机

state是react中内置的状态管理器,设置一些初始数据(数据格式是对象)。

setState,react中不建议我们直接通过state.变量名来进行赋值,即使赋值成功,但是页面上的数据不会发生变化(没有重新调用render函数),推荐我们使用setState方法来改变状态机中的数据。

setState会把新的数据合并到原来的数据中,重新调用render方法。

三、事件

1.事件绑定

(1)es5方式进行绑定

<button onClick={ this.自定义函数名 }

注意:this.自定义函数名()这种方式的写法,指定的函数会自动执行

保持this指向:

<button onClick={ this.自定义函数名.bind(this) }

(2)es6方式进行绑定

<button onClick={ ()=>this.addNum() }>es6-保持this指向</button><br/>
<button onContextMenu={ (e)=>this.handle1(e) }>es6-保持this指向-事件</button>

2.传递参数

(1)es5传递参数

①事件

不需要显示的在函数中进行传递,在定义函数的形参中直接使用即可

②额外参数

如果要在函数中继续获取事件和其他参数,那么在使用bind时应该加上this,然后再传递其他参数。

<button onContextMenu={ this.handle1.bind() }>es5--事件--无参数</button>
<button onClick={ this.handle2.bind(this,'haha') }>es5--事件--有参数</button>

es5传递参数的方式,在定义函数时,形参中的事件参数应该放到所有普通参数的最后。

(2)es6传递参数

<button onClick={ (e)=>this.handle2('hehe',e) }>es6-保持this指向-事件-有参数</button>

es6要获取事件和其他额外参数时,实参传递和形参接收的顺序是一致的。

四、组件通信

1.父子组件

在父组件上使用子组件时,通过自定义属性名=属性值进行数据的传递

在子组件中,如果是类组件通过this.props.自定义属性名来接收数据

​ 如果是函数组件通过形参props.自定义属性名来接收数据

父组件:

import React,{ Component } from 'react'
//引入子组件
import Child from './Child'
export default class Parent extends Component{
    render(){
        return(
            <div>
                <h1>这是一个父组件</h1>
                <Child gift="宝马"></Child>
            </div>
        )
    }
}

子组件:

import React from 'react'
var Child = (props)=>{
    return(
        <div>
            <h2>这是一个子组件,这是父组件给的礼物:{ props.gift }</h2>
        </div>
    )
}
export default Child;

2.子父组件

在父组件使用子组件时,除了可以传递普通数据,还可以传递事件。

父组件:

state = {
        msg:''
    }
    setMsg(e){
        console.log('此事件被子组件执行了',e)
        this.setState({
            msg:e
        })
    }
    render(){
        return(
            <div>
                <h1>这是一个父组件</h1>
                <Child gift="宝马" toParent={ (e)=>this.setMsg(e) }></Child>
                <hr/>
                <h1>这是子组件发送过来的数据:{ this.state.msg }</h1>
            </div>
        )
    }

子组件:

render(){
    return(
        <div>
            <h2>这是一个子组件,这是父组件给的礼物:{ this.props.gift }</h2>
            <button onClick={ ()=>this.props.toParent('口罩100个') }>发送数据</button>
        </div>
    )
} 

3.DOM节点操作

ref

(1)字符串

可以给子组件设置一个ref属性,然后可以通过this.refs.属性名来获取/设置子组件中的数据。

<Song ref="mySong"></Song>

可以通过this.refs.mySong来获取到组件。

(2)回调函数

可以给子组件设置一个ref属性,它的属性值不是字符串,而是一个函数(自动执行)。可以把子组件当成参数进行传递,然后就可以对组件中的数据进行获取或者修改。

<Song ref={ (el)=>this.getChild2(el) }></Song>

回调函数的写法不会在this.refs存在子组件。

不推荐直接使用ref,只有万不得已才去使用。

五、模拟表单数据双向绑定

六、初始化项目失败

[图片上传失败...(image-f0df1e-1582630015203)]

解决办法:

在命令行中执行命令:npm cache clean --force 清除缓存

然后再重新执行初始化操作

七、作业

用react实现用户注册、登录界面,点击注册或者登录按钮时获取到用户输入的内容

表格页面

(可以使用bootstrap,样式要好看)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容

  • 作为一个合格的开发者,不要只满足于编写了可以运行的代码。而要了解代码背后的工作原理;不要只满足于自己的程序...
    六个周阅读 8,419评论 1 33
  • 前言 开发一个React应用,更多的是在编写组件,而React组件最小的单位就是React元素,编写组件的最大的好...
    itclanCoder阅读 1,140评论 0 1
  • 目前,react组件有三种写法,分别是es5的createClass写法,es6的class写法,以及statel...
    ZoomFunc阅读 1,616评论 0 1
  • 40、React 什么是React?React 是一个用于构建用户界面的框架(采用的是MVC模式):集中处理VIE...
    萌妹撒阅读 1,004评论 0 1
  • 『咚。 有文化和有知识应该是两码事。 大多数时候,对于我来说,知识只是用来攻击无知的武器而已,用来体现自身的优越工...
    绵花不白阅读 289评论 0 0