一. React 是什么

  1. 声明式写法

  2. 组件化

  3. 一次学习, 随处编写

二. 为什么要学习React

  1. 大厂加持 - Facebook

  2. 最流行, 使用人数最多, 最被开发者喜爱

  3 简单易懂

三. 准备开发环境

  1. 官方脚手架工具 create-react-app

  2. node版本大于6.0

  3. npm install create-react-app -g 全局安装

  4. create-react-app my-project  创建项目

 四. JSX(奇怪的HTML是什么)

  1. JavaScript的语法扩展

  2. 可以使用花括号{} 内嵌 任何 js表达式

  3. JSX属性

五. JSX  这奇怪的HTML被编译成什么

  1.它是一种语法  -   React.createElement()

  2. ReactElement 对象

  3. babel  在线编译  工具  https://www.babeljs.cn/

六.  Props / State   / Forms

  1. Props : 组件像一个函数, 接受特定的输入 (props),  产出特定的输出 (react element)

  

import React from 'react'

// 组件写法一:
// class NameCard extends React.Component {
// render() {
// const { name, number, isBoy, tags } = this.props
// return (
// <div className='alert alert-success'>
// <h4>{name}</h4>
// <ul>
// <li>电话: {number}</li>
// <li>{isBoy?'男':'女'}</li>
// <hr/>
// <p>
// {tags.map((item,index)=>(
// <span className="badge badge-secondary" key={index}>{item}</span>
// ))}
// </p>
// </ul>
// </div>
// )
// }
// }
// 组件写法二: 组件函数写法
const NameCard = (props) => {
const { name, number, isBoy, tags } = props
return (
<div className='alert alert-success'>
<h4>{name}</h4>
<ul>
<li>电话: {number}</li>
<li>{isBoy?'男':'女'}</li>
<hr/>
<p>
{tags.map((item,index)=>(
<span className="badge badge-secondary" key={index}>{item}</span>
))}
</p>
</ul>
</div>
)
}
export default NameCard

2. State (状态)

  . 组件内部的数据 可以动态改变;

  . this.setState()是更新state的唯一途径

import React from 'react';

class likesButton extends React.Component {
constructor(props) {
super(props)
this.state = {
likes: 0
}
// this.increaseLikes = this.increaseLikes.bind(this) //绑定this 或者用箭头函数onClick={()=>{this.increaseLikes()}}
}
increaseLikes() {
console.log(this)
this.setState({
likes: ++this.state.likes
})
}
render() {
return (
<div className="likes-button-component">
<button
type="button"
className="btn btn-outline-primary btn-lg"
// onClick={this.increaseLikes}//绑定this
onClick={()=>{this.increaseLikes()}}
>
点赞 {this.state.likes}
</button>
</div>
)
}
} export default likesButton

3. 生命周期

  . 组件初始化;

  . 组件更新;

  . 组件卸载;

  

定时器,时时计数

import React from 'react';

class Clocks extends React.Component {
constructor(props) {
super(props)
this.state = {
date: new Date()
}
}
componentDidMount() {
this.timer = setInterval(()=>{
this.setState({
date: new Date()
})
},1000)
}
//componentDidUpdate 有两个参数, 第一个 props 第二个state
componentDidUpdate(currentProps,currentState) {
console.log(currentState)
}
componentWillUnmount() {
clearInterval(this.timer)
}
render() {
return (
<div className="clock-component jumbotron">
<h1>{this.state.date.toLocaleTimeString()}</h1>
</div>
)
}
} export default Clocks

4. forms(表单)

  . 表单元素和其他DOM元素的区别

  . Controlled Components - 受控组件

import React from 'react';

// input// 受控组件写法
// class FormBox extends React.Component {
// constructor(props) {
// super(props)
// this.state = {
// value: ''
// }
// }
// handleChange(event) {
// console.log(event)
// this.setState({
// value: event.target.value
// })
// }
// handleSubmit(event) {
// alert(this.state.value)
// event.preventDefault()
// }
// render() {
// return (
// <form className="p-5" onSubmit={(event)=>{this.handleSubmit(event)}}>
// <div className="form-group">
// <label>留言内容</label>
// <input
// type="text"
// className="form-control"
// placeholder="请输入内容"
// value={this.state.value}
// onChange={(event)=>{this.handleChange(event)}}
// />
// </div>
// <button type="submit" className="btn btn-primary">留言</button>
// </form>
// )
// }
// } // input// 非受控组件写法 ref 是 js 属性 参数为dom节点
class FormBox extends React.Component {
constructor(props) {
super(props)
}
handleSubmit(event) {
alert(this.textInput.value)
event.preventDefault()
}
render() {
return (
<form className="p-5" onSubmit={(event)=>{this.handleSubmit(event)}}>
<div className="form-group">
<label>留言内容</label>
<input
type="text"
className="form-control"
placeholder="请输入内容"
ref={(textInput)=>{this.textInput = textInput}}
/>
</div>
<button type="submit" className="btn btn-primary">留言</button>
</form>
)
}
} export default FormBox

未完待续..

进入React的世界的更多相关文章

  1. 通往全栈工程师的捷径 —— react

    腾讯Bugly特约作者: 左明 首先,我们来看看 React 在世界范围的热度趋势,下图是关键词“房价”和 “React” 在 Google Trends 上的搜索量对比,蓝色的是 React,红色的 ...

  2. 使用React并做一个简单的to-do-list

    1. 前言 说到React,我从一年之前就开始试着了解并且看了相关的入门教程,而且还买过一本<React:引领未来的用户界面开发框架 >拜读.React的轻量组件化的思想及其virtual ...

  3. 前端开发框架简介:angular和react

    作者:vienwu react是facebook推出一个用来构建用户界面的js库.官方介绍的三大特性如下: just the ui 把react只当作一个ui组件就好,等同于传统mvc中的view. ...

  4. react学习笔记(二)编写第一个react组件

    继续上一节课的内容,打开App.js:会看到如下代码: import React, { Component } from 'react';  //在此文件中引用React,以及reat的组件类 imp ...

  5. 深刻理解 React (一) ——JSX和虚拟DOM

    版权声明:本文由左明原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/155 来源:腾云阁 https://www.qclou ...

  6. React Hooks用法大全

    前言 在 React 的世界中,有容器组件和 UI 组件之分,在 React Hooks 出现之前,UI 组件我们可以使用函数,无状态组件来展示 UI,而对于容器组件,函数组件就显得无能为力,我们依赖 ...

  7. React项目使用Redux

    ⒈创建React项目 初始化一个React项目(TypeScript环境) ⒉React集成React-Router React项目使用React-Router ⒊React集成Redux Redux ...

  8. 如何架构一个 React 项目?

    编程有点像搞园艺.比起竭力去对付BUG(虫子),我们更愿意把一切弄得整洁有序,以免最后落得个身在荒野丛林中.低劣的架构会拖我们的后腿,也会使得BUG更容易钻进系统里去. 想要对你的项目进行架构,方法有 ...

  9. 二、【重点】环境安装:通过淘宝 cnpm 快速安装使用 React,生成项目,运行项目、安装项目

    1.cnpm代替npm 如果你的系统还不支持 Node.js 及 NPM 可以参考我们的 Node.js 教程. 我们建议在 React 中使用 CommonJS 模块系统,比如 browserify ...

随机推荐

  1. 【Apollo自动驾驶源码解读】车道线的感知和高精地图融合

    模式选择 在modules/map/relative_map/conf/relative_map_config.pb.txt文件中对模式进行修改: lane_source: OFFLINE_GENER ...

  2. 【译】ASP.NET Core 6 中的性能改进

    原文 | Brennan Conroy 翻译 | 郑子铭 受到 Stephen Toub 关于 .NET 性能的博文的启发,我们正在写一篇类似的文章来强调 6.0 中对 ASP.NET Core 所做 ...

  3. [ Skill ] load 函数优化,识别相对路径

    https://www.cnblogs.com/yeungchie/ 在 cds.lib 文件中定义库的路径,为了规范库定义的管理,经常这样做: . |-- cds.lib ------------- ...

  4. think php 验证码

    1.下载 composer require topthink/think-captcha 1.* // composer 下载 //过程 D:\PHP\phpstudy_pro\WWW\1906A\p ...

  5. 『现学现忘』Docker基础 — 22、使用Docker安装Nginx

    目录 步骤1:搜索镜像 步骤2:下载Nginx镜像 步骤3:运行Nginx镜像 步骤4:进行本机测试 步骤5:进入容器内操作 步骤6:测试外网访问容器 步骤1:搜索镜像 使用docker search ...

  6. Seata XA 模式示例分析

    @ 目录 1 下载示例 2 示例结构 3 业务服务 business-xa 3.1 模块结构 3.2 Controller 层 3.3 Service 层 3.4 stock Feign 客户端 3. ...

  7. java 实现装饰器设计模式

    package com.gylhaut.base; /** * 装饰器 * 类与类之间的关系 * 1.依赖:形参(局部变量) * 2.关联:属性 * 聚合 属性 整体和部分 不一致的生命周期 人和手 ...

  8. 遇到REMOTE HOST IDENTIFICATION HAS CHANGED怎么办?

    今日遇到如下问题: 警告的大概意思就是,主机密钥发生变更,并提示安全风险(可能存在中间人攻击) 但是事实是,这是因为我重装系统之后遇到的问题.重装系统后,指纹当然会发生变化了...在Xshell实验中 ...

  9. MySQL知识补充(表字段操作、视图、触发器、事物、存储过程、内置函数、流程控制、索引、慢查询)

    今日内容概要 表字段操作补充(掌握) 视图(了解) 触发器(了解) 事务(掌握) 存储过程(了解) 内置函数(了解) 流程控制(了解) 索引(熟悉) 内容详细 1.表字段操作补充 # 1.添加表字段 ...

  10. loj536「LibreOJ Round #6」花札(二分图博弈)

    loj536「LibreOJ Round #6」花札(二分图博弈) loj 题解时间 很明显是二分图博弈. 以某个点为起点,先手必胜的充要条件是起点一定在最大匹配中. 判断方法是看起点到该点的边有流量 ...