搭建 webpack、react 开发环境(三)
配置 react-router-dom
我们开发一个 React 工程肯定不是一两个“页面”就可以满足需求的,所以我们需要一个在多个“页面”中跳转的功能,在使用 React 构建的单页面应用中,要想实现页面间的跳转,首先想到的就是使用路由。
考虑 React 工程中的路由时,通常会想到 react-router 和 react-router-dom,其中 React-router 提供了一些 router 的核心 Api,包括 Router, Route, Switch 等,但是它没有提供 Dom 操作进行跳转的 Api,而 React-router-dom 让我们可以通过dom的事件控制路由。
由于我们这次只是搭建开发环境,所以就不再做更多的介绍,现在来做一个简单的说明,首先我们需要安装 react-router-dom:
$ yarn add react-router-dom
然后我们简单的使用一下,以验证安装的结果和使用的效果,我们先在跟组件 App 中的同目录下创建两个组件:
// Home.js
import React from 'react';
import { Link } from 'react-router-dom'; export default () => (
<div>
<div>home page</div>
<Link to="/product">go</Link>
</div>
); // Product.js
import React from 'react'; export default () => (
<div>product page</div>
);
然后我们在主组件 App 中引入相关的依赖并进行简单的使用:
import React from 'react';
import { BrowserRouter, Route } from 'react-router-dom'; import Home from './Home';
import Product from './Product'; const App = () => (
<BrowserRouter>
<div>
<Route path="/" exact component={Home} />
<Route path="/product" exact component={Product} />
</div>
</BrowserRouter>
); export default App;
现在我们进入项目时会在根目录下,所以会自动进入 Home 页面,当我们点击 go 字段的时候就会跳转到 Product 页面,也就意味着已经安装成功了。
配置 Redux
在 React 中有一个单项数据流的概念,在大型应用中单靠 React 对于数据的管理并不理想,所以我们需要依赖 Redux 来进行管理。
Redux 是一个面向 JavaScript 应用的可预测状态容器,它能够让你的页面的数据管理更轻松,现在我们就来对它进行安装并进行简单的使用,首先我们安装 Redux:
$ yarn add redux
然后我们在 src 目录下创建 store 目录,并添加 index.js 和 reducers.js 文件:
// index.js
import { createStore } from 'redux'; import reducer from './reducers'; const store = createStore(reducer); export default store; // reducers.js
const defaultState = {
text: 'Hello world',
}; /* 必须返回一个纯函数 */
export default (state = defaultState) => state;
最后我们改变一下 Home 组件以其来测试配置和使用的情况:
import React from 'react';
import { Link } from 'react-router-dom';
import store from './store'; class Home extends React.Component {
constructor(props) {
super(props); this.state = store.getState();
const { text } = this.state;
this.text = text;
} render() {
return (
<div>
<div>{this.text}</div>
<Link to="/product">go</Link>
</div>
);
}
} export default Home;
现在页面中的正常情况会显示 store 存储的数据,也就是“Hello world”字样。
配置 其它
接下来会对配置的对象列出一个列表来,就不再像之前这样在页面中同时列出做出的修改,如果有兴趣的同学,可以直接点击 show me the code 直接查看源码,也可以查看提交历史中对应 commit 中的内容。
毕竟主要是配置,使用方法三两句就说不清楚了,所以暂且这样:
最后,如果在开发中有使用到 Git 的话,那么结合 husky 和 lint-staged 配置代码检查工作流将会非常的棒,在我们配置完成之后,每当我们提交时,都会执行代码检查工作,如果代码的书写不规范的话将会取消本次提交。
当然这两者的功能并不仅仅如此,感兴趣的朋友可以点击上面的链接了解更多,这里我们先来简单的配置体验一下它的功能,首先还是安装依赖:
$ yarn add husky lint-staged --dev
然后我们在 package.json 文件中对它们进行配置:
{
"scripts": {
"precommit": "lint-staged"
},
"lint-staged": {
"src/**/*.js": "eslint"
}
}
现在我们每次提价前就会执行代码检测啦,你可以特意书写一行不符合规范的代码来来进行测试。
环境的配置到这里就告一段落啦,这里更多的是介绍了 React 相关插件和库的安装,如果你想要知道最初的搭建步骤,你可以点击 搭建 webpack、react 开发环境(一) 来继续查看。如果你需要查看 webpack 方面的一些配置和插件的使用,以及一些可以优化的地方可以点击 搭建 webpack、react 开发环境(二) 来继续查看。
搭建 webpack、react 开发环境(三)的更多相关文章
- 从零开始搭建webpack+react开发环境
环境主要依赖版本 webpack@4.8.1 webpack-cli@2.1.3 webpack-dev-server@3.1.4 react@16.3.2 babel-core@6.26.3 bab ...
- 搭建 webpack + React 开发环境
说在开头 上个月断断续续的在研究webpack的配置,但是很多网上的文章基本上都是只说了开发环境的配置,而忽略了生产环境的配置.大致研究了一下门路,然后就来写一篇随笔让自己能在以后能有个地方可以做参考 ...
- Qemu搭建ARM vexpress开发环境(三)----NFS网络根文件系统
Qemu搭建ARM vexpress开发环境(三)----NFS网络根文件系统 标签(空格分隔): Qemu ARM Linux 经过上一篇<Qemu搭建ARM vexpress开发环境(二)- ...
- 如何搭建 node,react 开发环境
项目相关内容:Sublime + Node + React --注意:在 windows 操作系统中,如果把 node 安装在系统盘(一般是C盘),会导致 node 没有操作文件的权限的问题,如无法新 ...
- 「C语言」在Windows平台搭建C语言开发环境的多种方式
新接触C语言,如何在Windows下进行C语言开发环境的搭建值得思考并整理. 以下多种开发方式择一即可(DEV C++无须环境准备). 注:本文知识来源于 Windows 平台搭建C语言集成开发环境 ...
- Qemu搭建ARM vexpress开发环境(二)----通过u-boot启动Linux内核
Qemu搭建ARM vexpress开发环境(二)----通过u-boot启动Linux内核 标签(空格分隔): Qemu ARM Linux 在上文<Qemu搭建ARM vexpress开发环 ...
- Webpack笔记(二)——搭建React开发环境
前几天一直在学习webpack,总算比之前学习的时候有了点收获,所以在昨天发布了一篇webpack入门笔记,今天继续使用webpack练了练手,搭建了一个React开发环境,如果还不熟悉的童鞋可以看一 ...
- 搭建 webpack、react 开发环境(二)
配置处理样式文件 到目前为止,整个工程的配置已经差不多了,对于 React 更多相关的配置将在后面继续介绍,现在我们先来对目前的工程进行优化. 前面我们学习了搭建 webpack.react 开发 ...
- 搭建 webpack、react 开发环境(一)
基本介绍 Webpack 是一个前端资源加载/打包工具.它将根据模块的依赖关系进行静态分析,然后将这些模块按照指定的规则生成对应的静态资源,它可以将多种静态资源 JavaScript.css.le ...
随机推荐
- vue.js(6)--v-model
v-model实现数据的双向绑定(简易计算器实例) 简易计算器实例 <!DOCTYPE html> <html lang="en"> <head> ...
- JAVA-第一期学习(上)
前言 果然,flag这个东西不能随便立,在我立志要学习java的第4天,我终于打开了我的eclipse.. 本章学习的内容是红框,第一期学习.真好,7月份需要学习完的东西,现在连helloworld还 ...
- Linux Shell 脚本学习第一天: 使用grep 命令,lsusb, ps -ef, 实现树莓派(Debian OS)时检测到依赖的USB设备启动后,启动终端自动执行shell脚本
1.应用背景: 无人监测的设备,常需要设置应用程序开机启动,程序启动前需要保证调用的设备先启动,运行环境先启动. 2.test.sh部分源码 #!/bin/sh #查看桌面是否启动 while tru ...
- 135-基于TMS320C6678、FPGA XC5VSX95T的2路Full模式Camera Link输入双目视觉处理平台
基于TMS320C6678.FPGA XC5VSX95T的2路Full模式Camera Link输入双目视觉处理平台 一.板卡概述 本板卡由我公司自主研发,基于CPCI架构,符合CPCI2.0标准,采 ...
- 【Leetcode周赛】从contest-121开始。(一般是10个contest写一篇文章)
Contest 121 (题号981-984)(2019年1月27日) 链接:https://leetcode.com/contest/weekly-contest-121 总结:2019年2月22日 ...
- 【串线篇】Mybatis缓存之一级缓存
1.体会 一级缓存:MyBatis:SqlSesion级别的缓存:默认存在,不需要设置. 机制:只要之前查询过的数据,mybatis就会保存在一个缓存中(Map):下次获取直接从缓存中拿:当前sess ...
- [BZOJ4278] [ONTAK2015]Tasowanie 贪心+后缀数组
题目链接 最近做题目好像有点东一榔头西一棒.好吧其实订正模拟题的时候需要用到什么感觉不太熟的就写一下吧. 显然直接贪心,比较两个点后面的串的字典序,小就选谁就可以了. 可以把两个串接起来,加一个\(i ...
- [BZOJ1023][SHOI2008]cactus仙人掌图 DP
题目链接 套路就是先考虑一般的树上做法.求直径的dp的做法大家应该都会吧. 那么设\(dp[i]\)表示\(i\)的子树中的点到\(i\)的最大距离. 在dp的过程中 \[ ans=\max\{dp[ ...
- Yii Ar model 查询
Ar model 查询 参照表: CREATE TABLE tbl_user ( id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT, username VA ...
- "sorted()"中的"Key Functions"
Pythonsorted()函数中可以加入key=<FUNCTION>参数.作用是每个元素在排序之前,先作为key=<FUNCTION>中FUNCTION的参数,用FUNCTI ...