阮一峰老师的github地址:React Demos

React 入门实例教程

2、ReactDOM.render()

// ReactDOM.render() 将模板转化为 HTML 语言
// 参数一:被渲染的标签
// 参数二:被插入的父元素
ReactDOM.render(
<h1>Hello, world!</h1>,
document.getElementById('example')
);

3、JSX 语法

import React, { Component } from "react"

export default class User extends Component {
render() {
const arr = [1, 2, 3, 4]
return (
<div>
{arr.map(item => (
<span style={{color: 'red'}}> {item}</span>
))}
</div>
)
}
}

{}中可以键入javascript代码,可以用来遍历数组,对象等;

在其中可以使用return来返回标签。

数组直接写在{}中就能遍历

import React, { Component } from "react"

export default class User extends Component {
render() {
const arr = [<h1 key="1">Hello world!</h1>, <h2 key="2">React is awesome</h2>]
return (
<div>
{arr.map(item => (
<p style={{ color: "red" }}> {item}</p>
))}
</div>
)
}
}

4、组件

代码如上:

组件类的第一个字母必须大写

组件类只能包含一个顶层标签

组件类必须以 / 结尾

组件类都必须有自己的 render 方法,用于输出组件

5、this.props.children

相当于Vuejs中的插槽

this.props.children:表示组件的所有子节点。

import React, { Component } from "react"

class NotesList extends React.Component {
render() {
return (
<ol>
{React.Children.map(this.props.children, child => <li style={{backgroundColor: 'yellow'}}>{child}</li>)}
</ol>
)
}
}
export default class User extends Component {
render() {
return (
<div>
<NotesList>
<h1 key="1">Hello world!</h1>
<h2 key="2">React 2019-12-02</h2>
</NotesList>
</div>
)
}
}

6、PropTypes

组件类的PropTypes属性,就是用来验证组件实例的属性是否符合要求

指定组件中的属性类型

import React, { Component } from "react"
import PropTypes from "prop-types"
class NotesList extends React.Component {
static propTypes = {
title: PropTypes.string.isRequired
}
render() {
return (
<ol>
<li style={{ color: "red" }}>{this.props.title}</li>
{React.Children.map(this.props.children, child => (
<li style={{ backgroundColor: "yellow" }}>{child}</li>
))}
</ol>
)
}
}
export default class User extends Component {
render() {
const title = "这是父组件给子组件传递的值"
return (
<div>
<NotesList title={title}>
<h1 key="1">Hello world!</h1>
<h2 key="2">React 2019-12-02</h2>
</NotesList>
</div>
)
}
}

7、获取真实的DOM

获取DOM节点,在输入框中赋值,并触发得焦方法

import React, { Component } from "react"

export default class User extends Component {
constructor(props) {
super(props)
// 将dom元素赋值在 this 上
this.myTextInput = React.createRef()
// 将 handleClick 事件绑定到 this 上,并重新命名
this.click = this.handleClick.bind(this)
}
handleClick() {
// 输入框赋值
this.myTextInput.current.value = '123'
// 输入框触发得焦事件
this.myTextInput.current.focus()
}
render() {
return (
<div>
{/* 通过ref属性获取dom元素,和vue相似 */}
<input type="text" ref={this.myTextInput} />
<input
type="button"
value="点击按钮使输入框得到焦点"
onClick={this.click}
/>
</div>
)
}
}

8、this.state

import React, { Component } from "react"

export default class User extends Component {
// 构造器创建 state
constructor(props) {
super(props)
this.state = {
liked: true
}
// p 标签上的 方法
this.handleClick = this.handleClick.bind(this)
}
handleClick(event) {
// state 下的 liked 状态改变
this.setState({ liked: !this.state.liked })
}
render() {
var text = this.state.liked ? "开心" : "不开心"
return <p onClick={this.handleClick}>点击切换心情 --- {text}</p>
}
}

由于 this.props 和 this.state 都用于描述组件的特性,可能会产生混淆。

一个简单的区分方法是,this.props 表示那些一旦定义,就不再改变的特性,而 this.state 是会随着用户互动而产生变化的特性。

9、表单

类似 vue 的 v-model 双向绑定属性

import React, { Component } from "react"

export default class User extends Component {
constructor(props) {
super(props)
this.state = {
value: "Hello!"
}
this.handleChange = this.handleChange.bind(this)
}
handleChange(event) {
// 设置 input 的值
this.setState({ value: event.target.value })
}
render() {
var value = this.state.value
return (
<div>
<input type="text" value={value} onChange={this.handleChange} />
<p>{value}</p>
</div>
)
}
}

react入门(1)之阮一峰react教程的更多相关文章

  1. redux-thunk, redux-logger 阮一峰 ( react中间件 )

    http://www.ruanyifeng.com/blog/2016/09/redux_tutorial_part_two_async_operations.html Redux 入门教程(二):中 ...

  2. react入门-----(jsx语法,在react中获取真实的dom节点)

    1.jsx语法 var names = ['Alice', 'Emily', 'Kate']; <!-- HTML 语言直接写在 JavaScript 语言之中,不加任何引号,这就是 JSX 的 ...

  3. 转:软件架构入门 (from 阮一峰)

    说明:其中讲到了 5 种的架构模型,很不错. from: http://www.ruanyifeng.com/blog/2016/09/software-architecture.html

  4. 《ECMAScript6入门》___阮一峰 笔记

    let和const命令 let命令 循环体的let变量只对花括号作用域可见,花括号外不可见 循环体的语句部分是一个父作用域,而循环体内部是一个单独的子作用域 let声明的变量不存在变量提升,未声明的使 ...

  5. React入门--------JSX

    React学习网站 React官方英文网站:http://reactjs.cn/react/docs/top-level-api.html React官方中文网站:http://www.css88.c ...

  6. react入门学习及总结

    前言 不知不觉一年又过去了,新的一年又到来,2019应该要好好思考,好好学点有用的东西,规划下自己今后的学习方向,不要再像以前那样感觉很迷茫. react简单介绍 官网及中文文档 https://re ...

  7. es6 Object.assign ECMAScript 6 笔记(六) ECMAScript 6 笔记(一) react入门——慕课网笔记 jquery中动态新增的元素节点无法触发事件解决办法 响应式图像 弹窗细节 微信浏览器——返回操作 Float 的那些事 Flex布局 HTML5 data-* 自定义属性 参数传递的四种形式

    es6 Object.assign   目录 一.基本用法 二.用途 1. 为对象添加属性 2. 为对象添加方法 3. 克隆对象 4. 合并多个对象 5. 为属性指定默认值 三.浏览器支持 ES6 O ...

  8. React入门学习

    为了获得更好的阅读体验,请访问原地址:传送门 一.React 简介 React 是什么 React 是一个起源于 Facebook 的内部项目,因为当时 Facebook 对于市场上所有的 JavaS ...

  9. 转: DNS 原理入门 (from 阮一峰)

    转自:http://www.ruanyifeng.com/blog/2016/06/dns.html DNS 原理入门   作者: 阮一峰 日期: 2016年6月16日 DNS 是互联网核心协议之一. ...

随机推荐

  1. 嵊州普及Day4T2

    题意:有一个单行走廊,每回合第ai个展柜会冒出来一只鬼,右边尽头有一个人间大炮和向最左传送门(费用均1金币),你需要每回合将所有鬼交换展柜,全部至最右,问若从一到n所有回合结束是需多少金币可射死所有鬼 ...

  2. greenplum 存储过程 索引信息

    涉及的索引表 参考:http://blog.nbhao.org/1539.html pg_index pg_indexes pg_stat_all_indexes # 记录当前数据库中所有的索引的使用 ...

  3. BusyBox 添加 自定义命令\小程序 (applet)

    背景 在做嵌入式开的时候,busybox无疑是非常好用的命令集,所以很多时候都喜欢把busybox移植到我们的系统里面. 说明 添加一个很简单的命令--hello_busybox,输出"He ...

  4. Luogu P3263 [JLOI2015]有意义的字符串

    Link 设\(e=\frac{b+\sqrt d}2,i=\frac{b-\sqrt d}2\). 显然\(f_n=e^n+i^n\)是一个整数,且\(f_n=(e+i)f_{n-1}+eif_{n ...

  5. 51nod 1380:夹克老爷的逢三抽一

    1380 夹克老爷的逢三抽一 基准时间限制:1 秒 空间限制:131072 KB 分值: 320 难度:7级算法题  收藏  取消关注 又到了诺德县的百姓孝敬夹克大老爷的日子,带着数量不等的铜板的村民 ...

  6. Ubuntu用sudo apt-get update出错:E: Problem executing scripts APT::Update::Post-Invoke-Success

    Ubuntu用sudo apt-get update出错:   E: Problem executing scripts APT::Update::Post-Invoke-Success 'if /u ...

  7. 数据结构——Java Stack 类

    定义 栈是Vector的一个子类,它实现了一个标准的后进先出的栈.堆栈只定义了默认构造函数,用来创建一个空栈. 堆栈除了包括由Vector定义的所有方法,也定义了自己的一些方法. 图例 在下面图片中可 ...

  8. 你从未见过的Case Study写作指南

    Case Study,意为案例分析,Case Study与其它的留学论文作业最大的的差别就在于Case Study在论文开始就需要明确给出论,然后再阐述这个结论的论证依据和理由.留学生们需要知道的是C ...

  9. lamp-module

    要求:    (1) 三者分离于两台主机: (2) 一个虚拟主机用于提供phpMyAdmin:另一个虚拟主机用于提供wordpress: (3) xcache (4) 为phpMyAdmin提供htt ...

  10. python中numpy矩阵运算操作大全(非常全)!

    python中numpy矩阵运算操作大全(非常全) //2019.07.10晚python矩阵运算大全1.矩阵的输出形式:对于任何一个矩阵,python输出的模板是:import numpy as n ...