进入React的世界
一. 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的世界的更多相关文章
- 通往全栈工程师的捷径 —— react
腾讯Bugly特约作者: 左明 首先,我们来看看 React 在世界范围的热度趋势,下图是关键词“房价”和 “React” 在 Google Trends 上的搜索量对比,蓝色的是 React,红色的 ...
- 使用React并做一个简单的to-do-list
1. 前言 说到React,我从一年之前就开始试着了解并且看了相关的入门教程,而且还买过一本<React:引领未来的用户界面开发框架 >拜读.React的轻量组件化的思想及其virtual ...
- 前端开发框架简介:angular和react
作者:vienwu react是facebook推出一个用来构建用户界面的js库.官方介绍的三大特性如下: just the ui 把react只当作一个ui组件就好,等同于传统mvc中的view. ...
- react学习笔记(二)编写第一个react组件
继续上一节课的内容,打开App.js:会看到如下代码: import React, { Component } from 'react'; //在此文件中引用React,以及reat的组件类 imp ...
- 深刻理解 React (一) ——JSX和虚拟DOM
版权声明:本文由左明原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/155 来源:腾云阁 https://www.qclou ...
- React Hooks用法大全
前言 在 React 的世界中,有容器组件和 UI 组件之分,在 React Hooks 出现之前,UI 组件我们可以使用函数,无状态组件来展示 UI,而对于容器组件,函数组件就显得无能为力,我们依赖 ...
- React项目使用Redux
⒈创建React项目 初始化一个React项目(TypeScript环境) ⒉React集成React-Router React项目使用React-Router ⒊React集成Redux Redux ...
- 如何架构一个 React 项目?
编程有点像搞园艺.比起竭力去对付BUG(虫子),我们更愿意把一切弄得整洁有序,以免最后落得个身在荒野丛林中.低劣的架构会拖我们的后腿,也会使得BUG更容易钻进系统里去. 想要对你的项目进行架构,方法有 ...
- 二、【重点】环境安装:通过淘宝 cnpm 快速安装使用 React,生成项目,运行项目、安装项目
1.cnpm代替npm 如果你的系统还不支持 Node.js 及 NPM 可以参考我们的 Node.js 教程. 我们建议在 React 中使用 CommonJS 模块系统,比如 browserify ...
随机推荐
- Logstash-CentOS7单机安装测试
目录 环境&准备 安装&启动 简单配置一下,看看效果 Conf配置文件参考 完成 环境&准备 下面所有操作都基于CentOS7 官网下载安装包 logstash下载 如官网打不 ...
- php 访问java接口数据
$header = []; $header[] = 'Accept:application/json'; $header[] = 'Content-Type:application/json;char ...
- Java:基于AOP的动态数据源切换(附源码)
1 动态数据源的必要性 我们知道,物理服务机的CPU.内存.存储空间.连接数等资源都是有限的,某个时段大量连接同时执行操作,会导致数据库在处理上遇到性能瓶颈.而在复杂的互联网业务场景下,系统流量日益膨 ...
- Gin 09 HTTP 重定向
gin http 重定向有两种方法,重写url 和 不重写的跳转.两种方法,gin 通过两个内置方法实现: demo package main import ( "github.com/gi ...
- petite-vue源码剖析-逐行解读@vue/reactivity之reactive
在petite-vue中我们通过reactive构建上下文对象,并将根据状态渲染UI的逻辑作为入参传递给effect,然后神奇的事情发生了,当状态发生变化时将自动触发UI重新渲染.那么到底这是怎么做到 ...
- Windows10 1809版本Windows自动更新服务无法禁用问题解决方案
症状 Windows Update服务已经在服务管理器中禁用,但是莫名奇妙的会被自动设置为手动,并会自动下载补丁.原因 微软加强了系统更新服务的保护措施,导致按照原有的禁用服务方法,能够随时被恢复.解 ...
- springWeb——Servlet
6.1.Servlet简介 servlet是sun公司开发动态web的一门技术 sum在这些API中提供了一个接口叫做:Servlet.开发的两个步骤: 编写一个类,实现Servlet接口 把开发好的 ...
- SQL Server 2008安全加固手册
1.身份鉴别 1.1避免使用空密码和弱口令 要求:应对登录操作系统和数据库系统的用户进行身份标识和鉴别. 目的:操作系统和数据库系统管理用户身份鉴别信息应具有不易被冒用的特点,口令应有复杂度要求并定期 ...
- 如何在 Spring Boot 中禁用 Actuator 端点安全性?
默认情况下,所有敏感的 HTTP 端点都是安全的,只有具有 ACTUATOR 角色的用户才能访问它们.安全性是使用标准的 HttpServletRequest.isUserInRole 方法实施的. ...
- 什么是基于Java的Spring注解配置? 给一些注解的例子?
基于Java的配置,允许你在少量的 Java注解 的帮助下,进行你的大部分Spring配置而非通过XML文件. 以@Configuration 注解为例,它用来标记类可以当做一个bean的定义,被Sp ...