react项目总结

一.React常用知识

1.react生命周期的运用


2.react-router/react-router-dom的运用

     - 路由组建    router/route/link/navlink/redirect/withRouter/switch

    =>react-router-dom


route下的属性path /exact /render /component

redirect下的属性from to /to 

     - 跳转路由


-传参


-browserRouter和hashRouter,MemoryRouter 和 StaticRouter的区别

1.前者利用H5的 history 接口,前台路由就是后台收到的路由,你点到其他页面一刷新,得,根本没这个文件,服务器也很无辜,到底让我渲染个啥?后台也可以简单的解决这个问题:甭管你请求的啥地址,我先把入口文件扔给你。node处理方式如下(需要express):

app.get('*',(request,response)=>{

  response.sendFile(path.resolve(__dirname,'../index.html'))

})

而hashRouter则刷新不会出现这个问题且通过#进行连接

2.MemoryRouter 和 StaticRouter  分别是非浏览器环境和服务器端渲染用的


react-router中switch的作用

有<Switch>标签,则其中的<Route>在路径相同的情况下,只匹配第一个,这个可以避免重复匹配


3.react父子组建的传值

   -子组建接收父组建属性或方法 this.props

  -父组建接收子组建的属性  通过执行父组建的属性传参,然后通过执行父组建的方法得到回调参数

-父组建执行子组建的方法 通过传属性name作为执行条件再配合

component willReceiveProps(nextProps){

if(nextProps.name!==this.props.name){

       //执行子组建大方法...

    }  

}

还可以通过ref={(node)=>this.node=node}在父组建中得到子组建的实列然后将实例保存在this.node上,然后通过this.node.childfunc()执行其子组建的方法


4.非父子组建传值 

     - redux  =>react-redux

action.dispatch=>store=>reducer 

action处理异步请求和dispatch命令 store接收然后去reducer进行加工返回到store然后去页面渲染store的数据  ,其中store利用createStore将reducer存入store,createStore的第二个参数可以是中间件,applymiddleware(redux-thunk)主要用于异步请求axio可以返回一个方法而不再是单一的对象


    -mobx简化版redux

需要在入口文件配置index.js

import { Provider } from 'mobx-react'

import store from './mobxStore'

ReactDOM.render(

    <Provider store={store}>

    <App />

    </Provider>

  , document.getElementById('app')

)

src下创建mobxStore文件夹新建index.js,导入action是为了新建方法,并修改值,observable为了监听方法值的变化,导出的时候默认new store(),页面执行mobx中的方法需要在class前面注入,此时执行store重的方法this.props.store.changetodoIds()从而修改了todoIds的值




5.组建模块化,提炼公用组建以及公用的方法

封装公共组建,封装异步请求方法(fetch /apicaller)

md5加密/日期时间格式的转化/cookie的封装/全局公共请求参数/签名

6.跨域代理的配置

  webpack devserver配置代理

devServer:{

       contentBase:'./dist',

      compress:true,

      open:true,//自动开启浏览器

      port:9000,

      hot:true,//热更新

      proxy:{

         '/api':  {

                   target:'http://localhost:3000',

                 pathRewrite:  {'^/api':'  '}

           }

       }

7.react性能优化

  1-----   sholudComponentUpdate:主要是用来手动阻止组件渲染,一般在这个函数中做组件的性能优化。

和这种方法实现同样效果的还可以React.PureComponent


2-----   react中map循环key的作用 : key是React中用于追踪哪些列表中元素被修改、删除或者被添加的辅助标识。在diff算法中,key用来判断该元素节点是被移动过来的还是新创建的元素,减少不必要的元素重复渲染。

3----环境设置为生产模式,压缩代码

4-----路由懒加载,异步加载模块,减少不必要的渲染

5---this的绑定

第一种是在构造函数中绑定this,第二种是在render()函数里面绑定this,第三种就是使用箭头函数,都能实现上述方法;

但是哪一种方法的性能最好,是我们要考虑的问题。应该大家都知道答案:第一种的性能最好

因为第一种,构造函数每一次渲染的时候只会执行一遍;

而第二种方法,在每次render()的时候都会重新执行一遍函数;

第三种方法的话,每一次render()的时候,都会生成一个新的箭头函数,即使两个箭头函数的内容是一样的。

第三种方法我们可以举一个例子,因为react判断是否需要进行render是浅层比较,简单来说就是通过===来判断的,如果state或者prop的类型是字符串或者数字,只要值相同,那么浅层比较就会认为其相同;

但是如果前者的类型是复杂的对象的时候,我们知道对象是引用类型,浅层比较只会认为这两个prop是不是同一个引用,如果不是,哪怕这两个对象中的内容完全一样,也会被认为是两个不同的prop。


8.react运行原理

采用虚拟dom 和diff算法结合

react是通过创建与更新虚拟元素来管理整个Virtual DOM的。

9.react对比vue运行原理

    react 与vue都是函数式编程,即声明式编程,先构建规则,然后去应用规则,而传统的则是命令时编程,下命令



10.针对低版本的浏览器并不支持所谓的vue/react框架的原因

解决方案:查询浏览器版本,针对低版本的浏览器弹出提示版本过低

源地址:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Function

https://blog.csdn.net/sinat_17775997/article/details/90417127

11.    虚拟dom

在react中,React把真实DOM树转为JavaScript对象树,也就是所谓的虚拟DOM。

在每次更新后,会重新计算Virtual DOM,并和上一次的Virtual DOM进行对比,对发生的部分进行批量更新,生成真实dom去渲染页面

虚拟dom实现了根据事件所需找到对应节点去变更,减少重新渲染所有节点的次数,减少dom操作次数,提高页面渲染效率

vdom核心api h('<标签名>',{...属性名},[...子元素])

patch(container,vnode)初始化节点初次渲染

patch(vnode,newVnode)需要变更的节点,原来的节点与新节点对比,重新渲染。

二.项目打包环境的配置

-1.webpack原理构建机制

a.解析webpack配置参数,合并从shell传入和webpack.config.js文件里配置的参数,生产最后的配置结果。

b.注册所有配置的插件,好让插件监听webpack构建生命周期的事件节点,以做出对应的反应。

c.从配置的entry入口文件开始解析文件构建AST语法树,找出每个文件所依赖的文件,递归下去。

d在解析文件递归的过程中根据文件类型和loader配置找出合适的loader用来对文件进行转换。

e.递归完后得到每个文件的最终结果,根据entry配置生成代码块chunk。

f.输出所有chunk到文件系统。

需要注意的是,在构建生命周期中有一系列插件在合适的时机做了合适的事情,比如UglifyJsPlugin会在loader转换递归完后对结果再使用UglifyJs压缩覆盖之前的结果


-2 .webpack 常见的配置

    a.入口  =>entry

    b.出口=>output /filename/path

    c.loader

是用来加载处理各种形式的资源,本质上是一个函数,      接受文件作为参数,返回转化后的结构,loader 用于对模块的 源代码进行转换即 文件转换器,例如把es6转换为es5,scss转换为css。

    d.plugins

用于扩展webpack的功能,在webpack构建生命周期的节点上加入扩展hook为webpack加入功能。

e.chunk多个文件组成的一个代码块,例如把一个可执行模块和它所有依赖的模块组合和一个chunk这体现了webpack的打包机制。

-3 .webpack 性能优化

---优化构建速度

     Webpack在启动后会根据Entry配置的入口出发,递归地解析所依赖的文件。这个过程分为搜索文件和把匹配的文件进行分析、转化的两个过程,因此可以从这两个角度来进行优化配置。

https://juejin.im/post/5b652b036fb9a04fa01d616b

三.echarts在react中的运用


四.期货/股票行情的运用  websocket /mqtt

    ---websocket 与普通http请求的区别 

 ---

五.ES6语法的运用

  1.es6解构

  2.箭头函数

     箭头函数和普通函数的区别

https://juejin.im/post/5ce108275188250ef043ee20

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,496评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,407评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,632评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,180评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,198评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,165评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,052评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,910评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,324评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,542评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,711评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,424评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,017评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,668评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,823评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,722评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,611评论 2 353

推荐阅读更多精彩内容