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.看数据库 ...
随机推荐
- 基于网络拓扑图通过RCMS对网络进行配置
目录 基于网络拓扑图通过RCMS对网络进行配置 一些基本命令 对网络拓扑图1的简单配置 二层交换机S3 三层交换机 S2 实验结果 对网络拓扑图2的简单配置 NAT.ACL配置公网IP 基于网络拓扑图 ...
- bootstrap使用笔记
本文翻译自[http://getbootstrap.com/2.3.2/scaffolding.html#gridSystem] 1.需要在H5的文档声明中使用: 2.如下一个简单的两列布局,先添加一 ...
- 【题解】与查询 [51nod1406]
[题解]与查询 [51nod1406] 传送门:与查询 \([51nod1406]\) [题目描述] 给出 \(n\) 个整数,对于 \(x \in [0,1000000]\),分别求出在这 \(n\ ...
- C#调用 kernel32.dll
调用方法: private string mFileName; //INI文件名 public OneGanttINI(string pFileName) { this.mFileName = App ...
- VS代码调试出现:当前不会命中断点。还没有为该文档加载任何符号。
第一步:一定要检查最顶部自己设置的是 Release模式还是Debug模式!!!下面这个图就是在我搜了好多解决方式之后,突然发现自己开的是Release模式!!!吐血. 第二步:如果你已经确定了自己是 ...
- C# 索引器(C#学习笔记05)
索引器 索引器能够使对象像数组一样被索引,使用数组的访问方式 object[x] 索引器的声明在某种程度上类似于属性的声明,例如,使用 get 和 set 方法来定义一个索引器. 不同的是,属性值的定 ...
- Beyond Compare 4 30天评估期结束的解决办法
修改注册表 regedit注册表中删除项目:HKEY_CURRENT_USER\Software\Scooter Software\Beyond Compare 4\CacheId 删除dll 重命名 ...
- 上传文件至Github仓库
Github的使用 创建一个本地的版本库(也就是一个文件夹) 新建文件夹,或使用Git bash命令行窗口创建 $ mkdir test $ cd test 在命令行中输入 git init把这个文件 ...
- web和网络基础
TCP/IP 协议族按层次分别分为以下 4 层: 应用层. 传输层. 网络层和数据链路层 把 TCP/IP 层次化是有好处的. 比如, 如果互联网只由一个协议统筹, 某个地方需要改变设计时, 就必须把 ...
- Linux下关于Qt无法调用fcitx的中文输入
1 本机环境: deepin 15.11 Qt 5.11.3 fcitx 输入法 2 问题描述 Qt Creator 和使用 QT 编译的程序运行时均不能使用deepin系统自带的fcitx输入法,且 ...