学了两天 react,乱讲一下学习思路,顺便弄了一个脚手架
之前一直用 vue 做一些小项目,最近接触了一个项目是用 react 做前端,虽然本身是做后端开发的,但是前端还是要了解一点的。
现在的项目基本上都是前后端分离的,后端就先不提了。前端的框架也是层出不穷,使用最多的就是 angular、vue、react 。angular 是前几年用的比较多,最近好像用的人没那么多了。vue 是华人开发的项目,也是这三个框架里上手最简单的。react 是 fecebook 开源的框架,市场占有率也是最高的,国外的公司和国内的一些大公司用的比较多。
我也不是专业前端,学习 react 也是一时兴起,讲不了什么高深的东西,就来说说入门 react 的一个过程,仅仅是入门而已。
前期准备
不光学习 react 需要储备一些前端的知识,学习 vue 等前端框架同样需要。
稍微了解一下 nodejs ,前端框架的原理是这样的,并不是像我们之前那样直接写操作 DOM 的 js 脚本或者使用 jquery,而是用 ES5、ES6 、TypeScript 等标准去组织项目代码,这其中需要用到 nodejs 的很多包,最后编译的时候,把用这些标准组织的代码编译成我们通常意义上的 js 代码,然后在浏览器执行。
会使用 npm ,这是一个包管理工具,对比 Java 来说,它就类似于 maven,可以方便的管理项目中使用的包。
webpack 了解一点,webpack 是一个现代 JavaScript 应用程序的静态模块打包器,我们项目开发和编译使用的命令 dev、start、build 最后都是由 webpack 帮我们完成的。
学习过程
我这里只是说一下我学习的过程。打开 Google,先去找 react 官网,有英文的和中文的,因为英文的看着费劲,所以就看了中文官网 https://react.docschina.org/。 花大概两个小时,把每个小结都看完,也就是做个大概了解,了解 react 到底是怎么一个机制,具体到写代码的时候肯定还是要返回来查的。学任何东西其实都是一样的,不能上来就拿一个 demo 开始改,肯定要先宏观的了解一下这项技术优缺点、运转机制,然后再钻到细节里。
看完官方文档后,开始创建一个小项目写写简单的代码。 react 为了方便入门,提供了一个脚手架工具,create-react-app,只需要运行简单的命令就能创建一个 react 项目出来。
先用 npm 全局安装 create-react-app 包。
npm install -g create-react-app
然后运行命令创建项目,运行之前先 cd 到你想创建项目的目录
create-react-app my-app
create-react-app 已经出到了 2.x 的版本,它帮助我们省去了一些配置上的东西,它其实是把 webpack 做了比较好的封装,大大节省了我们配置 webpack 的时间,可以另我们专注的写程序代码。如果不适用它的话,你从头到尾的配置项目结构和webpack,中间会有很多坑在等着你,恐怕还没开始写代码就已经中途放弃了。
然后运行 npm start 就可以把最简单的项目跑起来。
跑起来之后,可以根据官方文档来写两个简单的页面,建立一下自信。
如果你之前用过 vue,会发现 react 和 vue 差别是非常大的。vue 是非常直接 MVVM 模式,通俗点来说就是数据双向绑定,改变视图也就改变了 model ,改变 model 也就改变了视图。
而 react 是在每个视图中维护一个 state ,每次只能操作当前视图的 state ,每次页面加载需要初始化 state ,state 绑定到视图上,但是视图的修改,需要通知 state 。这是最基本的运行模式。如果是做一个比较小的系统,交互不是很复杂的那种,可以用这些足够了。
继续说看文档这件事,只看官方文档基本上可以写一些简单的页面了,但是还不够,我们通过搜索引擎继续搜索,各种各样的技术博客、文档进去看,会陆陆续续的发现更多的信息,比如 router 、redux、mobx 等等,继续根据新的关键词还能挖掘出更多的东西。以 react 为例,除了 react 核心的功能,还有一些扩展的框架,如果我们想把这些都了解,从早到晚看一天的文档恐怕也是不够的。
router 路由器,如果页面很多,项目很大的情况下,就需要路由器来管理页面路径了,访问哪个路径要加载哪个页面,这些还是统一管理起来比较好。
redux 和 mobx 是数据管理的扩展包 ,我们如果只用 state 来管理和维护数据,当有不同的页面需要有数据交互或共享的时候,就很吃力了,redux 或 mobx 就提供了数据统一管理的功能,把数据独立出来,这样就可以在不同的页面、不同的组件之间来回流转了。
比起 mobx 来,redux 相对来说就麻烦的多,mobx 提供了装饰器的语法功能,就像 Java 中的注解、Python中的装饰器一样。
写的非常乱,但这就像开始学习 react 一样,有些东西就是在你各种翻文档的过程中才发现的,比如 redux 和 mobx ,大多数时候,开始你并不知道有这些东西。
学习的过程中,我用 react + router + mobx 搭了一个脚手架项目,有想要用的可以关注公众号,回复 「react」 。
学了两天 react,乱讲一下学习思路,顺便弄了一个脚手架的更多相关文章
- React Native小白入门学习路径——五
React Native小白入门学习路径--五 序 "哦天呐!" 这句话成了我在实验室的口头禅, 老师可能觉得我们都是大神吧,都还在看着基础就给布置了那么多任务:写一个RN的TDD ...
- 【前端,干货】react and redux教程学习实践(二)。
前言 这篇博文接 [前端]react and redux教程学习实践,浅显易懂的实践学习方法. ,上一篇简略的做了一个redux的初级demo,今天深入的学习了一些新的.有用的,可以在生产项目中使用的 ...
- React Native小白入门学习路径——一
前言 过去这段时间一直忙着实验室考核任务,拼尽全力完成了自己的任务之后.正准备开始高强度的实验室的学习的时候,实验室组织了新老生交流会,这也应该是头一次这么近距离的面对大四前辈交流想法.感觉自己受益颇 ...
- React Native for Android 学习
前言 Facebook 在2015.9.15发布了 React Native for Android,把 JavaScript 开发技术扩展到了移动Android平台.基于React的React Na ...
- 【React】360- 完全理解 redux(从零实现一个 redux)
点击上方"前端自习课"关注,学习起来~ 前言 记得开始接触 react 技术栈的时候,最难理解的地方就是 redux.全是新名词:reducer.store.dispatch.mi ...
- Android(java)学习笔记219:开发一个多界面的应用程序之两种意图
1.两种意图: (1)显式意图: 在代码里面用intent设置要开启Activity的字节码.class文件: (2)隐式意图: Android(java)学习笔记218:开发一个多界面的应用程序之人 ...
- (zhuan) 大牛讲堂 | 算法工程师入门第二期-穆黎森讲增强学习
大牛讲堂 | 算法工程师入门第二期-穆黎森讲增强学习 2017-07-13 HorizonRobotics
- python中有两个下划线__的是内置方法,一个下划线_或者没有下划线的可能是属性,也可能是方法,也可能是类名
python中有两个下划线__的是内置方法,一个下划线_或者没有下划线的可能是属性,也可能是方法,也可能是类名,如果在类中定义的就是类的私有成员. >>> dir(__builtin ...
- css 两列自适应布局的4种思路
前面的话 前面已经介绍过css 两列布局中单列定宽单列自适应布局的6种思路的两列布局,而两列自适应布局是指一列由内容撑开,另一列撑满剩余宽度的布局方式.本文将从float.table.flex和gri ...
随机推荐
- Charles 连接手机抓包出现Unknown,一直无法抓包的问题解决
mac电脑安装了charles并且确保已经安装成功,https抓包需要安装的相关的证书已经安装,并且手机浏览器中输入chls.pro/ssl已经将证书下载完成,但是手机与电脑相连通过点击手机应用还是无 ...
- GIL(全局解释器锁)
GIL(全局解释器锁) 每个线程在执行的过程都需要先获取GIL 作用:在单核的情况下实现多任务(多线程),保证同一时刻只有一个线程可以执行代码,因此造成了我们使用多线程的时候无法实现并 ...
- Django基础四<二>(OneToMany和 ManyToMany,ModelForm)
上一篇博文是关于setting.py文件数据库的配置以及model与数据库表关系,实现了通过操作BlogUser,把BlogUser的信息存入后台数据库中.实际开发中有许多东西是相互联系的,除了数据的 ...
- 带着新人看java虚拟机06(多线程篇)
其实多线程还有很多的东西要说,我们慢慢来,可能会有一些东西没说到,那就没办法了,只能说尽量吧! 1.synchronized关键字 说到多线程肯定离不开这个关键字,为什么呢?因为多线程之间虽然有各自的 ...
- 非常贴心的轮子 FreeSql
FreeSql 项目从2018年11月28日开发至今,版本已发布至 v0.3.12,版本规则:年数-月-日-当日版本号.目前主要包括 FreeSql.FreeSql.Repository 两个项目的维 ...
- 【.NETCore开源】开弓没有回头箭
2019.2.11 开工大吉!经过了半个月的休假,今天回归岗位重新拾起工作,却发现熟悉的代码生疏了.年前的计划回忆不起来了,俗称"节后综合症". 忆半月圈子 过年放假的前几天有多篇 ...
- 在MySQL中实现Rank高级排名函数【转】
MySQL中没有Rank排名函数,当我们需要查询排名时,只能使用MySQL数据库中的基本查询语句来查询普通排名.尽管如此,可不要小瞧基础而简单的查询语句,我们可以利用其来达到Rank函数一样的高级排名 ...
- 详解mybatis映射配置文件
一 mybatis 映射文件结构 mybatis映射配置文件存在如下顶级元素,且这些元素按照如下顺序被定义. cache – 给定命名空间的缓存配置. cache-ref – 其他命名空间缓存配置的 ...
- 大数据量下DataTable To List效率对比
使用反射和动态生成代码两种方式(Reflect和Emit) 反射将DataTable转为List方法 public static List<T> ToListByReflect<T& ...
- 【Android】用Cubism 2制作自己的Live2D——来制作动态壁纸吧!
前言- Andorid SDK下载 baidu云 提取码:19jm 这次我们就来研究一下官方的例子之一的liveWallPaper,也就是开发Android的动态壁纸 先来看看这个例子运行的结果: ...