阮一峰老师的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. 使用Spring JMS轻松实现异步消息传递

    异步进程通信是面向服务架构(SOA)一个重要的组成部分,因为企业里很多系统通信,特别是与外部组织间的通信,实质上都是异步的.Java消息服务(JMS)是用于编写使用异步消息传递的JEE应用程序的API ...

  2. Verilog有符号整型数(signed int)比大小

    本文参考了https://blog.csdn.net/wenxinwukui234/article/details/42119265/ 关于2进制补码的思考和讨论. ================= ...

  3. <BitMap>大名鼎鼎的bitmap算法

    BitMap 抛砖引玉 首先,我们思考一个问题:如何在3亿个整数(0~2亿)中判断某一个数是否存在?现在只有一台机器,内存只有500M 这个问题像不像我们之前提到过的一个在0-10个数中,判断某一个数 ...

  4. 使用Ubuntu系统编译安装Zabbix企业级监控系统

    使用Ubuntu系统编译安装Zabbix企业级监控系统   作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Ubuntu系统部署笔记:https://www.cnblogs.com/ ...

  5. mac安装扩展出现grep: /usr/include/php/main/php.h

    在Mac下执行 sudo phpize时提示: grep: /usr/include/php/main/php.h: No such file or directorygrep: /usr/inclu ...

  6. springboot启动不能加载数据库驱动Failed to determine a suitable driver class

    SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/G:/sharp/repo ...

  7. vue+element 递归上传图片

    直接上代码. <template>   <div>     <el-upload       action="http://localhost:3000/pic ...

  8. 文本情感分析(二):基于word2vec、glove和fasttext词向量的文本表示

    上一篇博客用词袋模型,包括词频矩阵.Tf-Idf矩阵.LSA和n-gram构造文本特征,做了Kaggle上的电影评论情感分类题. 这篇博客还是关于文本特征工程的,用词嵌入的方法来构造文本特征,也就是用 ...

  9. obtainFreshBeanFactory方法源码跟踪

    看这篇文章之前可以先了解之前的跟踪流程,https://www.jianshu.com/p/4934233f0ead 代码过宽,可以shift + 鼠标滚轮 左右滑动查看 AbstractApplic ...

  10. Delphi IDFtp用法,包含断点续传

    1  连接远程服务器procedure Connect(AAutoLogin: boolean; const ATimeout: Integer);2  改变目录procedure ChangeDir ...