阮一峰老师的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. 做一个php登陆页面,用pc登陆和用手机登陆弹出来的登陆页面不一样。

    <?phpheader('Content-Type:text/html; charset=UTF-8');//定义页面编码为utf8$is_pc = (strpos($agent, 'windo ...

  2. Lesson 4 Seeing hands

    How did vera discover she had this gift of second sight? Several cases have been reported in Russia ...

  3. 二十 Filter&自动登录功能

    Filter过滤器 过滤器,其实就是对客户端发出来的请求进行过滤,浏览器发出,然后服务器用Servelt处理.在中间就可以过滤,起到的是拦截的作用. 不仅仅作用于客户端请求,而且过滤服务器响应 作用: ...

  4. Jquery实现列表增删改

    //需求:对列表的增删改  //代码如下 <!DOCTYPE html> <html lang="en"> <head> <meta ch ...

  5. YOLO V1、V2、V3算法 精要解说

    前言 之前无论是传统目标检测,还是RCNN,亦或是SPP NET,Faste Rcnn,Faster Rcnn,都是二阶段目标检测方法,即分为“定位目标区域”与“检测目标”两步,而YOLO V1,V2 ...

  6. Jmockit如何同时mock多个类的静态方法

    使用Jmockit来mock类的静态方法,网上有很多mock单个类静态方法的例子.有使用Expectations,还有使用MockUp的. 但是如果想在一个测试方法中mock多个类的静态方法,该怎么写 ...

  7. 对S7通信的连接的理解以及对比CAN通信协议来理解PLC通讯

    对S7通信的连接的理解以及对比CAN通信协议来理解PLC通讯. 对功能块 SFB12 和 SFB13 的R_ID参数的理解 ? 对于同一个数据包.发送方与接收方的R_ID应该相同. 用下图解释 双向连 ...

  8. 洛谷P1351 联合权值

    \(\Large\textbf{Description:}\) \(\large一棵树,父子之间距离为1,求距离为2的两点点权之积的最大值与和.\) \(\Large\textbf{Solution: ...

  9. SqlServer查看锁表与解锁

    某些情况下,sqlserver的表会被锁住,比如某个会话窗口有数据一直没提交,窗口又没关闭,这时表就会被锁住 其他任何连接查询表数据时都不会返回 这时需要手工杀掉产生死锁的会话ID,才能恢复正常 查看 ...

  10. centos 7安装nodejs

    ps: {install_path} 安装目录路径 1.安装wget yum install wget 2. 下载对应文件 wget -c https://nodejs.org/dist/v8.9.1 ...