react知识点总结(持续更新。。。)
1、 什么是以及为什么要使用webpack
现在的网页功能越来越丰富,所需要的JavaScript和模块也会很多,为开发更加简洁,出现了以下方法,如模块化,scss,typescript等。
但有些语法是浏览器无法识别的。所以需要用到webpack。
WebPack是模块打包器,它会将浏览器不能支持不能识别的语言语法,打包转换成浏览器可识别的语法,如(Scss,TypeScript等)。
两者并无太多的可比性
、webpack是为模块化提供解决方案;
、gulp是前端自动化构建工具。
、全局安装webpack
cnpm install webpack@3.5. -g 、创建文件夹 初始化文件夹
npm init -y 、局部安装webpack
cnpm install webpack@3.5. --save-dev 、创建 webpack.config.js 、创建 src dist 文件夹 、处理css的loader cnpm install --save-dev style-loader css-loader sass-loader node-sass 、处理js的loader
cnpm install --save-dev @babel/core babel-loader @babel/preset-env @babel/preset-react 、插件
cnpm install html-webpack-plugin --save-dev; 、热更新 服务器
cnpm install webpack-dev-server@ --save-dev;
、配置package.json 中的 script
"dev":"webpack-dev-server --open",
、运行打包
webpack
const path = require("path");
const HtmlWebpackPlugin = require("html-webpack-plugin");
const PATH = {
app:path.join(__dirname,"./src/index.js"),
build:path.join(__dirname,"./dist")
}
//下面的代码都是 webpack的配置项
module.exports = {
entry:{
app:PATH.app
},
output:{
filename:"[name].js",//app.js
path:PATH.build
},
//做模块的处理 用loader进行处理
module: {
rules:[
{
test:/\.js$/,
use:{
loader:"babel-loader",
options:{
presets:["@babel/env","@babel/react"]
}
}
},
{
test:/\.(css|scss)$/,
use:["style-loader","css-loader","sass-loader"]//loader的执行顺序是从下至上 从右至左
}
]
},
plugins:[
new HtmlWebpackPlugin({
filename:"index.html",
template:"./index.html",
})
]
}
React 起源于 Facebook 的内部项目,用来架设 Instagram 的网站,并于 年 月开源。
.声明式设计 −React采用声明式,可以轻松描述应用。 .高效 −React通过对DOM的模拟(虚拟DOM),最大限度地减少与DOM的交互。 .灵活 −React可以与已知的库或框架很好地配合。 .JSX − JSX 是 JavaScript 语法的扩展。React 开发不一定使用 JSX ,但我们建议使用它。 .组件 − 通过 React 构建组件,使得代码更加容易得到复用,能够很好的应用在大项目的开发中。 .单向响应的数据流 − React 实现了单向响应的数据流,从而减少了重复代码,这也是它为什么比传统数据绑定更简单。
react:约束性比较小 灵活度比较高 (没有指令) 语法jsx语法 vue:约束性比较大 灵活度比较低 vue速度快 templates React 和 Vue 有许多相似之处,它们都有:
* 使用 Virtual DOM
* 提供了响应式 (Reactive) 和组件化 (Composable) 的视图组件。
* 将注意力集中保持在核心库,而将其他功能如路由和全局状态管理交给相关的库。
https://cn.vuejs.org/v2/guide/comparison.html#React React 还是 Vue: 你应该选择哪一个Web前端框架?
如果你喜欢用(或希望能够用)模板搭建应用,请使用Vue
如果你喜欢简单和“能用就行”的东西,请使用Vue
如果你的应用需要尽可能的小和快,请使用Vue
如果你计划构建一个大型应用程序,请使用React
如果你想要一个同时适用于Web端和原生App的框架,请选择React
如果你想要最大的生态圈,请使用React
如果你已经对其中一个用得满意了,就没有必要换了
https://blog.csdn.net/yzh_2017/article/details/54909166
纯函数的定义是,对于相同的输入,永远会得到相同的输出
https://zhuanlan.zhihu.com/p/21714695 函数式编程好处:
代码简洁,开发快速
接近自然语言,易于理解
更方便的代码管理
易于"并发编程“
代码的热升级
import React from "react";
import ReactDom from "react-dom"; ReactDom.render(
Dom, //组件时为<App/>
document.querySelector('#root'),
()=>{
console.log("渲染完成")
}
)
参数1:需要渲染的组件或者虚拟DOM 参数2:将渲染好的组件或者虚拟DOM放在哪个标签上 参数3:回调函数
import React ,{Component,Fragment} from "react";
//constructor 初始化函数 可以用来存放当前组件所需要的一些状态
//Component:所有组件的父类
//在react当中所有的组件创建的时候必须首字母大写, 为了区分Element元素和组件的区别
class App extends Component{
constructor(){
//super必须要写
super();
this.state = {
message:"wppp"
}
}
render(){
let {message} = this.state;
return (
//Fragment作用当做节点标签使用 但是不会被渲染成标签
<Fragment>
//事件与原生相同,注意用bind改变this指向App,(注:bind有返回值)
//react中的函数不用加()
<div onClick={this.handleClick.bind(this)}>{message}</div>
</Fragment>
)
}
handleClick(){
//react中如果需要改变this.state里面的数据 需要用this.setState方法 当前方法是异步的方法
// 用法为:
// 参数1:对象 修改数据 //key:需要修改的状态 : val:值
// 参数2:回调 验证数据是否修改成功 同时可以获取到最新的DOM结构
this.setState({
key:val
},()=>{})
this.setState({
message:""
})
}
}
export default App;
constructor:
初始化生命周期函数 当前函数调用的时候必须掉用super方法,否则会报错 this的指向也会发生问题 当前函数中可以用来定义当前组件所需要的状态 ,通过this.state 如果当前生命周期函数中不传props的话,是访问不到外部属性的
如果在当前生命周期函数中和super中传递了props那么就能访问到外部属性 componentWillMount:
挂载前:
constructor执行完毕以后就会执行当前生命周期函数,当前生命周期函数中可以接受到外部属性 可以将外部属性转换为内部属性 在挂载之前是访问不到真正的DOM元素的 render:
、作用:渲染虚拟DOM
、特点:当rander渲染虚拟Dom的时候会将数据和虚拟Dom进行相结合生成真实的DOM结构,会将当前的虚拟DOm在缓存中保存一份,当数据发生改变的时候会将缓存中的虚拟Dom和第二次改变的虚拟Dom进行对比。修改需要改变的虚拟DOM节点 而不是改变所有的虚拟Dom diff算法
、render函数什么时候会执行?
当this.state的状态发生改变的时候render函数就会执行在表单当中如果设置了value值 那么就必须设置onchange方法 如果不需要事件的情况下 我们可以给当前元素设置一个defaultValue;在react中我们可以使用事件对象
父传子
在子组件标签内部用自定义属性进行传递 接受的时候通过this.porps进行接受
如
父组件中:<One val={message}></One>
子组件中:let {val} = this.props 子传父
在子组件标签内部用定义属性定义一个方法传递给子组件 子组件内部调用这个方法传递参数
如:
父组件中:<One send={this.handleSend.bind(this)}></One> 然后调用handleSend(val){ this.setState({ oneVal:val }) } 进行父组件值得修改
子组件中:this.props.send(this.state.email) ——可通过事件传递(如onclick等) 注:this.props是用来接受外部属性的 非父子组件传值
手动封装 $on $emit $off
传值的一方调用$emit 接受值的一方调用$on
如:
传值组件中:Observer.$emit("handle",this.state.oneVal) ——可通过事件传递(如onclick等)
接收组件中:constructor中
Observer.$on("handle",(val)=>{
this.setState({
oneval:val
})
})
定义外部默认状态() 如:
组件名称.defaultProps = { One.defaultProps = {
key:val val:""
} }
限制外部属性的类型
、下载第三方包
cnpm install prop-types --save-dev
、引入 import PropTypes from "prop-types";
、校验
如
组件名称.propTypes = { One.propTypes = {
key:PropTypes.类型 val:PropTypes.number
} }
还包括:
optionalArray: PropTypes.array,
optionalBool: PropTypes.bool,
optionalFunc: PropTypes.func,
optionalNumber: PropTypes.number,
optionalObject: PropTypes.object,
optionalString: PropTypes.string,
optionalSymbol: PropTypes.symbol,
react知识点总结(持续更新。。。)的更多相关文章
- C#、Java中的一些小知识点总结(持续更新......)
前言:在项目中,有时候一些小的知识,总是容易让人忽略,但是这些功能加在项目中往往十分的有用,因此笔者在这里总结项目中遇到的一些实用的小知识点,以备用,并持续更新...... 1.禁用DataGridV ...
- 零散知识点总结(持续更新……)
这篇博客用于记录平时学习中遇到的零散的知识点,它们不适于单独写一篇长博客,在这里记录下来一是为了增强记忆,二是为了方便复习总结.这篇博客会持续更新... 一.JS数据类型及类型判断 1. JS ...
- iOS 小知识点(持续更新)
1.如何通过代码设置Button title的字体大小 设置Button.titleLabel.font = [UIFont systemFontOfSize:<#(CGFloat)#> ...
- Android 小知识点(持续更新)
①文件保存默认是private权限. ②在layout的xml文件中onClick的方法中包含一个View类型的参数 ③获取项目下files路径:Context.getFilesDir(); ④获取项 ...
- C# 知识点记录(持续更新中)
从看C#入门经典开始系统的学习C#,本文主要记录学习过程中的一些知识点,也是我博客生涯的开始,比较重要成体系的部分会单重新写文章整理归纳. 1.一字不变的字符串 @字符 使转义序列不被处理,按照原样输 ...
- React知识杂烩(持续更新)
每隔半年不看官方文档,你就会不认识React了
- js中一些小知识点总结--持续更新
以下知识点来自于编写高质量代码-改善JavaScript程序的188个建议,只用于自我知识的补充. 一.NaN 1.NaN是一个特殊的数量值,不表示一个数字,尽管下面的代码仍然是返回类型为number ...
- PMP--综合考试知识点,持续更新中。。。
1]盈亏平衡点=固定成本/(销售价格-可变成本). 2]项目管理(Project Management): 就是把各种知识.技能.手段和技术应用于项目活动之中,以达到项目的要求. 3]有效的管理要求项 ...
- Android 基础知识点(持续更新)
一.AndroidManifest 每一个安卓工程都有AndroidManifest.xml的配置文件,在所有项目中该名称都不会变.该文件是Android工程的一个全局配置文件,所有在Android中 ...
- MYSQL操作的一些知识点,持续更新中····
基本概念——库 1.数据库服务器:库——>表——>行/列 2.cmd下链接: mysql – uroot –proot 3.创建库:create database php; 3.看数据库 ...
随机推荐
- 一、docker 入坑(win10和Ubuntu 安装)
前言 终究还是绕不过去了,要学的知识真的是太多了,好在我们还有时间,docker 之前只闻其声,不曾真正的接触过,现在docker 越来越火,很多公司也都开始使用了.所以对于我们程序员而言,又得修炼一 ...
- linux 判断一个用户是否存在
#!/bin/bash read -p "please input a username:" username >&; then echo "user ex ...
- docker 的Portainer和Dive
Portainer Portainer是Docker的图形化管理工具,提供状态显示面板.应用模板快速部署.容器镜像网络数据卷的基本操作(包括上传下载镜像,创建容器等操作).事件日志显示.容器控制台操作 ...
- NVDLA软件架构和源码解析 第一章—内核驱动【华为云技术分享】
驱动整体设计介绍 不同的processor Nvidia DLA的内核驱动KMD(Kernel mode driver)中,并不是把DLA当成一个设备来控制,而是把不同的功能模块当做不同的proces ...
- Java基础扫盲系列(二)—— Java中BigDecimal和浮点类型
一直以来我几乎未使用过BigDecimal类型,只有在DB中涉及到金额字段时听说要用Decimal类型,但是今天再项目代码中看到使用BigDecimal表示贷款金额. 本篇文章不是介绍BigDecim ...
- SQL系列(四)—— 唯一值(distinct)
有时需要查询某列上的不重复的数据,如: SELECT name FROM student; 结果: name lxy lxy lxy lxy 这样的结果显然不符合我们的需求.如何对列数据进行去重,查询 ...
- 基于netty手写RPC框架
代码目录结构 rpc-common存放公共类 rpc-interface为rpc调用方需要调用的接口 rpc-register提供服务的注册与发现 rpc-client为rpc调用方底层实现 rpc- ...
- RabbitMQ的简单模式快速入门与超时异常的处理方法
本文适合JAVA新人,想了解RabbitMQ又不想去看官网文档的人(英语水看的头疼(◎﹏◎),但建议有能力还是去看官网文档). 消息队列MQ(一) MQ全称为Message Queue,消息队列是应用 ...
- 前端1-----块级标签(独占一行),排版标签(样式排版),其他标签,form表单(input的多种类型)
前端1-----块级标签(独占一行),排版标签(样式排版),其他标签,form表单(input的多种类型) 一丶HTML块级标签 排版标签 p 标签: 段落标签,会自动在段落上下加上空白来分开 p标签 ...
- FineReport连接ApacheKylin
1.前言 Apache Kylin™是一个开源的分布式分析引擎,提供Hadoop之上的SQL查询接口及多维分析(OLAP)能力以支持超大规模数据,最初由eBay Inc. 开发并贡献至开源社区.它能在 ...