一. 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. 百度敏感词过滤(tp)

    百度智能云网址https://cloud.baidu.com/ 1:打开网址->管理控制台->产品服务->SDK下载>内容审核->phpSDK 2:下载至php目录ser ...

  2. L2Dwidget二次元前端添加人物插件

    如果想要在博客园上添加这个插件,只需要在设置的"页首html代码"中添加下面的js就行 <!-- 右下角live2d效果 --> <script src=&quo ...

  3. 同事都说有SQL注入风险,我非说没有

    前言 现在的项目,在操作数据库的时候,我都喜欢用ORM框架,其中EF是一直以来用的比较多的:EF 的封装的确让小伙伴一心注重业务逻辑就行了,不用过多的关注操作数据库的具体细节.但是在某些场景会选择执行 ...

  4. 图解|用好MySQL索引,你需要知道的一些事情

    我是蝉沐风. 这一篇文章来聊一聊如何用好MySQL索引. 为了更好地进行解释,我创建了一个存储引擎为InnoDB的表user_innodb,并批量初始化了500W+条数据.包含主键id.姓名字段(na ...

  5. C/C++读取SEGY文件(三)

    SEGY IO (IBM&PC) 本文档将介绍SEGY的读取与写入过程,其中包括IBM与PC两种数据格式的转换. 程序将调用IEEE2IBM.cpp文件完成IBM与PC格式的互相转换. 新建头 ...

  6. C/C++语言读取SEGY文件笔记(一)

    SEGY IO 推荐采用的IDE为Visual studio(VS),本文档将介绍SEGY文件的读取与写入过程,即SEGY文件的复制. 因此,新建头文件ReadSeismic.h与C++文件ReadS ...

  7. 【系列】关于NJUPT电赛自控方向第一次积分赛的总结

    本人是NJUPT电子科学与技术专业大一摸鱼狗一枚.本博客旨在总结与分享个人准备电赛所学知识,同时也是为了防止遗忘,锻炼写文章的能力.目前电赛方向为自控方向.主要研究方向为单片机.图像处理.自动控制相关 ...

  8. LGP6156题解

    真·简单题 题目大意 给定 \(n\) 和 \(k\),求出这个柿子的值: \[\sum_{i=1}^n\sum_{j=1}^n(i+j)^k\mu^2(\gcd(i,j)gcd(i,j) \] 按照 ...

  9. 一些JDK自带的性能分析利器

    有时候碰到服务器CPU飙升或者程序卡死之类的问题,一般都不太好定位.这类bug一般都隐藏的比较深并且还可能是偶发性的,比较棘手. 对于此类问题,一般我们都有固定的分析流程.借助于JDK自带的一些分析工 ...

  10. (九)React Ant Design Pro + .Net5 WebApi:后端环境搭建-IdentityServer4-简单配置

    一.简介 IdentityServer4 是用于 ASP.NET Core 的 OpenID Connect 和 OAuth 2.0 框架,通过中间件的方式集成.JWT(json web token) ...