Node.js并非一个JavaScript框架,Node.js是JavaScript运行时的运行环境,类比Java中的JVM。html
java的开端是什么,无疑是JVM,自从有了JVM,java才能吹牛说本身是“一次编写到处运行”,无论你是windows仍是linux,只要安装了对应版本的JVM均可以运行.class文件。前端
一样Node.js的做用和JVM的同样同样的,也是js的运行环境,不论是你是什么操做系统,只要安装对应版本的Node.js,那你就能够用js来开发后台程序。这具备划时代的意义,意味着一直以来只能在浏览器上玩来玩去的js,能够作后端开发了。vue
从有了Node.js后就催生出一大批用js作后台开发的前端人员,这部分人员就是偏前端的“全栈程序员”。记住,Node.js是和JVM同等地位的js运行环境,打开了前端人员走向后端的道路。java
React设计思想及其独特,属于革命性创新,性能出众,代码逻辑却很是简单。react
库(library):小而巧,库只提供了特定的api。优势是船小好调头,能够很方便的从一个库切换到另外的库,可是代码几乎不会改变。linux
框架(Framework):大而全,框架提供了一整套的解决方案。因此,若是在项目中间,想切换到另外的框架是比较困难的。webpack
和Angular1相比,React设计很优秀,一切基于JS而且实现了组件化开发的思想程序员
React提供了无缝转到ReactNative上的开发体验。web
+ 什么是模块化:是从代码的角度来进行分析的;把一些可复用的代码,抽离为单个的模块,便于项目的维护和开发。算法
+ 什么是组件化:是用UI界面的角度来进行分析的;把一些可复用的UI元素,抽离为单独的组件,便于项目的维护和开发。
+ 组件化的好处:随着项目规模的增大,手里的组件愈来愈多,很方便就能够把现有的组件,拼接成一个完整的页面。
+ Vue是如何实现组件化的:经过.vue文件,来建立对应的组件:
+ template 结构 + script 行为 + style 样式
+ React是如何实现组件化的:React中有组件化的概念,可是并无像Vue这样的组件模板文件;React中,一切都是以JS来表现的。所以要学习React,JS要合格,ES6和ES7(async和await)要会用
一、运行npm init -y快速初始化项目
二、在项目根目录建立src源代码目录和dist产品目录
三、使用cnpm安装webpack,运行cnpm install webpack -D以及cnpm install webpack-cli -D
四、Webpack4.x提供了约定大于配置的概念,目的是为了减小配置文件的体积;默认约定的 打包的入口是/src/index.js;打包的输出文件是/dist/main.js
五、Webpack4.x 新增了mode选项(必填项),可选值为development和production
六、为了方便运行,配置实时打包编译工具->webpack-dev-server。 cnpm install webpack-dev-server -D
七、Webpack-dev-server打包好的main.js是托管到了内存中,在项目根目录的物理磁盘中看不到;可是咱们能够认为,在项目根目录中,有一个看不见的mian.js
八、Webpack-dev-server打包后打开的首页是项目根目录,而不是src目录下的index.html。 为了让打包编译后的网页自动打开index.html,就须要用到HtmlWebpackPlugin插件,来在项目根目录下生成index.html。安装并在webpack.config.js的module.exports中配置plugins。
配置babel的步骤
使用构造函数来建立组件,若是要接收外界传递的数据,须要在构造函数的参数列表中使用props来接收;必需要向外return一个合法的JSX的虚拟DOM。
//第一种建立组件的方式 function Hello(props) { //若是在一个组件中 return 一个 null。则表示此组件是空的,什么都不会渲染 // return null //在组件中,必须返回一个合法的JSX虚拟DOM元素 return <div>这是 Hello 组件 --- {props.name} --- {props.age} --- {props.gender}</div> //不管是vue仍是React,组件中的props永远都是只读的,不能被从新赋值 }
ReactDOM.render( <div> {/*直接把建立的组件名称,以标签的形式,丢到页面上便可*/} <Hello name={dog.name} age={dog.age} gender={dog.gender}></Hello> </div> , document.getElementById('parent'))
一、 history:用来跳转路由 路径
2.、Match:匹配结果,若是匹配上就是对象,匹配不上就是null
三、Location:当前路径 pathname当前路径名
//打开webpack.config.js,并在导出的配置对象中,新增以下节点 resolve: { extensions: [ '.js', '.jsx', '.json' ]//表示这几个文件的后缀名,能够省略不写(.js和.json是默认有的) }
//alias:别名;这里设置别名是为了让后续引用的地方减小路径的复杂度 alias: { '@': path.join(__dirname, './src') } }
一、若是一个组件须要本身的私有数据,则推荐使用:class建立的有状态组件
二、若是一个组件不须要私有的数据,则推荐使用:无状态组件
三、React官方:无状态组件因为没有本身的state和声明周期函数,因此运行效率会比有状态组件稍微高一些
一、props中的数据都是外界传递过来的
二、state/data中的数据,都是组件私有的;(经过Ajax获取回来的数据,通常都是私有数据)
三、 props中的数据都是只读的,不能从新赋值
四、state/data中的数据,都是可读可写的
一、history:用来跳转路由 路径
二、Match:匹配结果,若是匹配上就是对象,匹配不上就是null
三、Location:当前路径 pathname当前路径名
一、什么叫 hash 地址,hash 地址就是指 # 号后面的 url
二、假若有一个 Link 标签,点击后跳转到 /abc/def。
BrowserRouter: http://localhost:8080/abc/def HashRouter: [<u>http://localhost:8080/#/abc/def</u>](http://localhost:8080/#/abc/def)
缘由在于,若是是单纯的静态文件,假如路径从 / 切换到 /a 后,此时刷新页面,页面将没法正常访问,须要在服务器端进行相关配置