(1)使用到的技术及类库
create-react-app + Ant Design of React + redux + React-router + jQuery(jQuery纯属个人喜好哈哈)
(2)废话不多说直接上搭建流程
先装脚手架
npm install -g create-react-app
然后运行
create-react-app 你的项目名
// 安装ts项目
// create-react-app 你的项目名 --typescript
然后一顿回车就ok了
cd 进项目文件夹
npm i
安装完毕后
npm start
接下来扩展create-react-app项目的Webpack 配置
执行命令
npm run eject
执行完这个命令后会将封装在 CRA 中的配置全部反编译到当前项目,这样用户就可以完全取得 webpack 文件的控制权,想怎么修改就怎么修改了。
接下来我们扩展下项目中package.json的dependencies加上如下代码
"antd": "^3.1.3",
"babel-plugin-import": "^1.6.3",
"jquery": "^3.3.1",
"react-router": "^4.2.0",
"react-router-dom": "^4.2.2",
"react-redux": "^5.0.6",
"redux": "^3.7.2",
"redux-thunk": "^2.2.0"
然后再执行一下命令,把这些类库安装进去(jquery、路由、redux、蚂蚁组件等)
npm i
安装完成后我们现在已经把antd组件成功运行起来了,但是在实际开发过程中还有很多问题,例如上面的例子实际上加载了全部的 antd 组件的样式(对前端性能是个隐患)。
接下来找到项目中config文件夹下webpack.config.js找到下图位置添加代码如下
['import', { libraryName: 'antd', libraryDirectory: 'es', style: 'css' }]
接下来找到项目App.js改造代码如下
import React, {Component} from 'react';
import {createStore, applyMiddleware} from "redux";
import {Provider} from "react-redux";
import thunk from "redux-thunk";
import Reducers from "./reducers/index"
import './App.css';
import $ from "jquery"
import {Switch, Route, Redirect} from "react-router-dom";
import page1 from "./page1/page1"
import page2 from "./page2/page2"
import {HashRouter} from "react-router-dom";
const store = createStore(Reducers, applyMiddleware(thunk));
class App extends Component {
render() {
$(window).scroll(function () { // 测试下jquery是否可用
console.log("滚动打印")
});
return (
<Provider store={store}> // 引入redux
<HashRouter> // 开始路由配置
<Switch>
<Route path="/" exact render={() => (<Redirect to="/index"/>)}/> // 匹配不到重定向路由
<Route path="/index" component={page1}/> // page1页面路由
<Route path="/page2" component={page2}/> // page2页面路由
</Switch>
</HashRouter>
</Provider>
);
}
}
export default App;
接下来创建src下文件夹page1、page2、reducer
page1文件夹下page1.js
import React, { Component } from 'react';
import {Button} from "antd"
import {NavLink} from "react-router-dom";
import {connect} from "react-redux";
class page1 extends Component {
render() {
return (
<div className="App">
<NavLink to={"/page2"}><Button>go page2</Button></NavLink> // 这里就是路由跳转到page2
<div>这里是页面1</div>
<br/>
<br/>
<br/>
<Button onClick={() => { // 在这里面测试redux,顺便使用下antd组件Button
// this.props.dispatch(function(dispatch){
// dispatch({
// type: "COUNT_ADD"
// });
// })
this.props.dispatch({
type: "COUNT_ADD",
data: "234"
});
}}>测试redux</Button>
<div>{this.props.count}</div>
</div>
);
}
}
export default connect(state=>(state.page1))(page1);
reducer文件夹下index.js
import {combineReducers} from "redux";
import page1 from "./page1";
let Reducers = combineReducers({
page1
});
export default Reducers;
page1的reducer:reducer文件夹下page1.js
export default function page1(state={
count: 0
},action) {
switch(action.type){
case "COUNT_ADD": { // 注册个加一的事件
return {
count: state.count + 1
};
}
default:
return state;
}
}
page2文件夹下page2.js
import React, { Component } from 'react';
import {Button} from "antd"
import {NavLink} from "react-router-dom";
class page1 extends Component {
render() {
return (
<div className="App">
<NavLink to={"/index"}><Button>go page1</Button></NavLink> // 这里是跳转到page1
<div>这里是页面2</div>
</div>
);
}
}
export default page1;
都搭建完毕后执行下面命令运行
npm start
运行效果如下,从page1跳到page2,利用redux实现点击按钮进行+1:
到此我们的一个简单的小实例就搭建完毕了,万事开头难,先搭建个架子后面自己可以往里面一点点完善,动手很重要,动手很重要,动手很重要重要的事情说三遍,哈哈。
欢迎小伙伴们留言交流,一起成长。
2020.8.19更新
今天执行create-react-app创建新项目时报错如下
A template was not provided. This is likely because you’re using an outdated version of create-react-app. Please note that global installs of create-react-app are no longer supported.
原因是最近 create-react-app 更新了新版本,如果以前将create-react-app 安装在本地,即执行了 create-react-app创建项目就会报此错误。
解决方案
卸载 create-react-app ,执行:
npm uninstall -g create-react-app
执行完卸载再按文章片头从新安装创建就可以了