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.看数据库 ...
随机推荐
- tornado之websoket
继承WebSoketHandler def open(self): # 当一个WebSoket连接建立之后被调用 def on_message(self, message): # 当客户端发送一个消息 ...
- FRP represents an intersection of two programming paradigms.
FRP represents an intersection of two programming paradigms. Functional programming Functional progr ...
- ASP.NET MVC实现单用户登录
现在许多网站都要求登录后才能进行进一步的操作,当不允许多用户同时登录一个帐号时,就需要一种机制,当再登录一个相同的帐号时,前面登录的人被挤下线,或者禁止后面的人登录.这里实现的是前一种功能. 网上有许 ...
- jQuery中使用Ajax获取JSON格式数据示例代码
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式.JSONM文件中包含了关于“名称”和“值”的信息.有时候我们需要读取JSON格式的数据文件,在jQuery中 ...
- 2d图片依次排列在屏幕中间(SpriteRenderer)
如图所示: C#代码: using System.Collections; using System.Collections.Generic; using UnityEngine; public cl ...
- Git 理解修改
参考链接:https://www.liaoxuefeng.com/wiki/896043488029600/897884457270432 Git之所以比其他版本控制系统设计得优秀,就是因为Git跟踪 ...
- Number最大范围相关
今天在leetcode上面做题目,有一道数组形式的整数加法运算,本来以为还蛮简单的,想着直接将数组先转化为String类型,然后直接相加就好, 代码如下: var addToArrayForm = f ...
- 上传文本到hdfs上的一些命令
在hadoop下创建文件夹 bin/hdfs dfs -mkdir -p /usr/hadoop/spark/ touch wc.input 写一些文本进去. 上传到hdfs上 bin/hdfs ...
- RedHat 6 安装 MySQL 5.5 流程记录及相关问题解决方案
目录 1. RedHat 中 使用 yum 方式安装 MySQL 2. 安装过程中遇到的问题 1. RedHat 中 使用 yum 方式安装 MySQL 1.1 删除系统自带的 MySQL 5.1 r ...
- .Net Core 2.2 发布IIS遇到的那些坑
这两天在研究.Net Core 发布iis总结一下. 我主要是参照官方文档: https://docs.microsoft.com/zh-cn/aspnet/core/host-and-deploy/ ...