react入门(1)之阮一峰react教程
阮一峰老师的github地址:React Demos
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教程的更多相关文章
- redux-thunk, redux-logger 阮一峰 ( react中间件 )
http://www.ruanyifeng.com/blog/2016/09/redux_tutorial_part_two_async_operations.html Redux 入门教程(二):中 ...
- react入门-----(jsx语法,在react中获取真实的dom节点)
1.jsx语法 var names = ['Alice', 'Emily', 'Kate']; <!-- HTML 语言直接写在 JavaScript 语言之中,不加任何引号,这就是 JSX 的 ...
- 转:软件架构入门 (from 阮一峰)
说明:其中讲到了 5 种的架构模型,很不错. from: http://www.ruanyifeng.com/blog/2016/09/software-architecture.html
- 《ECMAScript6入门》___阮一峰 笔记
let和const命令 let命令 循环体的let变量只对花括号作用域可见,花括号外不可见 循环体的语句部分是一个父作用域,而循环体内部是一个单独的子作用域 let声明的变量不存在变量提升,未声明的使 ...
- React入门--------JSX
React学习网站 React官方英文网站:http://reactjs.cn/react/docs/top-level-api.html React官方中文网站:http://www.css88.c ...
- react入门学习及总结
前言 不知不觉一年又过去了,新的一年又到来,2019应该要好好思考,好好学点有用的东西,规划下自己今后的学习方向,不要再像以前那样感觉很迷茫. react简单介绍 官网及中文文档 https://re ...
- es6 Object.assign ECMAScript 6 笔记(六) ECMAScript 6 笔记(一) react入门——慕课网笔记 jquery中动态新增的元素节点无法触发事件解决办法 响应式图像 弹窗细节 微信浏览器——返回操作 Float 的那些事 Flex布局 HTML5 data-* 自定义属性 参数传递的四种形式
es6 Object.assign 目录 一.基本用法 二.用途 1. 为对象添加属性 2. 为对象添加方法 3. 克隆对象 4. 合并多个对象 5. 为属性指定默认值 三.浏览器支持 ES6 O ...
- React入门学习
为了获得更好的阅读体验,请访问原地址:传送门 一.React 简介 React 是什么 React 是一个起源于 Facebook 的内部项目,因为当时 Facebook 对于市场上所有的 JavaS ...
- 转: DNS 原理入门 (from 阮一峰)
转自:http://www.ruanyifeng.com/blog/2016/06/dns.html DNS 原理入门 作者: 阮一峰 日期: 2016年6月16日 DNS 是互联网核心协议之一. ...
随机推荐
- 让Nutz支持最快的模板引擎Smarty4j
Smarty4j是一个开源的模板引擎.没错,它就是著名的php模板引擎之Java移植版. 它特点就是将模板文件或者字符串编译成java类直接执行,所以效率比一般的模板解释的方式处理要快.它发展较晚,所 ...
- python内置函数三
ord() 函数 和 chr() 相反 chr() 是将数字转换成assci码 ord() 是将字符串转换成assci码 显示 pow() 函数 pow(x,y,z) 表示x**y ...
- elk基本配置
https://www.cnblogs.com/zsl-find/articles/10730458.html https://www.cnblogs.com/mylovelulu/p/1053000 ...
- Echarts学习宝典
1,可以使用百度图说中的图表代码复制到option中,还可在百度图说中以可视化的方式编辑数据,调整参数和编辑样式.(也可借助百度图说更改部分样式) 2,借助网站 https://echarts.bai ...
- python-模块加密hashlib
import hashlib# md5ybm_pwd='yuanbapqingsdfs234FF234HF@F' #m = hashlib.md5() #bytes_ybq = ybm_pwd.enc ...
- HiBench成长笔记——(5) HiBench-Spark-SQL-Scan源码分析
run.sh #!/bin/bash # Licensed to the Apache Software Foundation (ASF) under one or more # contributo ...
- OBU设备非接触式读卡方案:SI522
传统收费站将成历史!全部转为ETC系统 当高速人工收费已经成为我们驾驶出行的习惯后,我们发现,高速人工收费带来低效率.长等待以及落后性等缺点逐渐给人们出行带来不便.伴随着我国汽车保有量的逐年递增,高速 ...
- Vulkan SDK Demo 之一 熟悉
DiligentEngine的API是D3d11和D3D12风格的,vulkan也被封装成了这种风格的API. 在了解Diligent Engine是如何对vulkan进行封装之前,我准备先学习下Vu ...
- 爬虫(十六):Scrapy框架(三) Spider Middleware、Item Pipeline
1. Spider Middleware Spider Middleware是介入到Scrapy的Spider处理机制的钩子框架. 当Downloader生成Response之后,Response会被 ...
- linux内核链表的实现
.\linux-2.6.22.6_vscode\include\linux\list.h #ifndef _LINUX_LIST_H#define _LINUX_LIST_H #ifdef __KER ...