一. 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. 【C#操作Excel】同名Excel放入同一文件夹中,然后合并为同一个Excel文件

    近期有对Excel操作的需求,由于都是重复劳动,故分享代码如下,本人也是技术菜鸟没有考虑性能,如果有大牛能够指教就再好不过了 事先电脑中需要安装Excel,然后Vs中引用Microsoft.Offic ...

  2. JVM内存模型及GC机制

    一.JVM简介 1.1什么是JVM JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各 ...

  3. kube-scheduler源码分析(3)-抢占调度分析

    kube-scheduler源码分析(3)-抢占调度分析 kube-scheduler简介 kube-scheduler组件是kubernetes中的核心组件之一,主要负责pod资源对象的调度工作,具 ...

  4. 【译】.NET 6 网络改进

    原文 | Máňa Píchová 翻译 | 郑子铭 对于 .NET 的每个新版本,我们都希望发布一篇博客文章,重点介绍网络的一些变化和改进.在这篇文章中,我很高兴谈论 .NET 6 中的变化. 这篇 ...

  5. vue路由传参丢失问题

    vue路由传递参数如果用params传递参数,那么页面刷新就会丢失数据,可以改用query来传递参数,这样刷新就不会丢失

  6. python的matplotlib.pyplot绘制甘特图

    博主本来就想简单地找一下代码,画一幅甘特图,结果百度之后发现甘特图的代码基本都不是用matplotlib库,但是像柱状图等统计图通常都是用这个库进行绘制的,所以博主就花了一些时间,自己敲了一份代码,简 ...

  7. Fedora 阿里云源

    镜像下载.域名解析.时间同步请点击 阿里巴巴开源镜像站 简介 Fedora 是一个 Linux 发行版,是一款由全球社区爱好者构建的面向日常应用的快速.稳定.强大的操作系统.它允许任何人自由地使用.修 ...

  8. 数据库原理 之MySQL

    数据库种类: 关系型数据库: mysql 专注于数据安全 和功能 ,存取时 会有表的结构化操作解析sql语句---- 丢给磁盘存取 ----取出,结构化成表 常用关系型数据库产品介绍oracle数据库 ...

  9. 一个故事看懂CPU的SIMD技术

    好久不见,我叫阿Q,是CPU一号车间的员工.我所在的CPU有8个车间,也就是8个核心,咱们每个核心都可以同时执行两个线程,就是8核16线程,那速度杠杠滴. 我所在的一号车间,除了负责执行指令的我,还有 ...

  10. WebGPU 工具分享 - WGSL 代码高亮插件(VSCode)与预处理工具

    WGSL 还在积极讨论中,虽然各位大佬不是很满意这个新生儿. 不过,社区已经有了基础的实验性工具(VSCode 插件),并支持了较新的语法. ① WGSL 插件 这个插件支持对文件扩展名为 .wgsl ...