阮一峰老师的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. 环境变量方式使用 Secret【转】

    通过 Volume 使用 Secret,容器必须从文件读取数据,会稍显麻烦,Kubernetes 还支持通过环境变量使用 Secret. Pod 配置文件示例如下: 创建 Pod 并读取 Secret ...

  2. 需要多个参数输入时-----------------考虑使用变种的Builder模式

    业务需求: 创建一个不可变的Person对象,这个Person可以拥有以下几个属性:名字.性别.年龄.职业.车.鞋子.衣服.钱.房子. 要求: 其中名字和性别是必填项,而其他选填项可以根据情况自由输入 ...

  3. synchronized wait notify 生产者消费者

    1.生产者消费者模型 public class ProducterConsumerTest{ public static void main(String[] args){ System.out.pr ...

  4. Javascript获取当前鼠标在元素内的坐标定位

    代码如下: <!doctype html> <html> <head> <meta charset="utf-8"> <tit ...

  5. 看完本文,Essay写作再也不需要凑字数

    很多同学都说过自己写论文的时候出现“词穷”的情况,无奈只能靠“胡编乱造”来凑字数写出开头段,这其实是大家的阅读量没有达到要求.但不能因为出现这种情况就对自己的论文不负责任,否则你的论文分数可能就不会对 ...

  6. 2.10 学习总结 之 JQ加强

    一.说在前面  昨天 完成了体温统计APP的编写 今天 学习json数据结构 二.学习总结 1.json数据结构 1)什么是json: JSON(JavaScript Object Notation) ...

  7. 解决CSS背景模糊

    .banner{ background:url(banner.jpg); -moz-background-size:100% 100%; background-size:100% 100%; }

  8. Redis 详解 (四) redis的底层数据结构

    目录 1.演示数据类型的实现 2.简单动态字符串 3.链表 4.字典 5.跳跃表 6.整数集合 7.压缩列表 8.总结 上一篇博客我们介绍了 redis的五大数据类型详细用法,但是在 Redis 中, ...

  9. 八十二、SAP中的ALV创建之一,新建一个程序

    一.创建一个ALV的程序 二.填写程序属性 三.保存到本地对象 四.来到代码区,这样一个新工程就创建好了,我们后续来写相关的创建代码

  10. 158-PHP strstr函数输出第一次出现字符串的位置到字符串结尾的所有字符串

    <?php $str='PHP is a very good programming language!'; //定义一个字符串 echo '第一次出现字母l的位置到字符串结尾的所有字符串'.s ...