1. 创建项目第一步 基本搭建
  2. 在创建之前,需要有一个git 仓库,我们要把项目搭建到git
  3. 目录介绍
  4.  
  5. cd 到某个盘
  6. mkdir workspace 创建workspace文件夹
  7. cd workspace 进入workspace文件夹
  8. workspace一般为我们仓库和项目总目录
  9. git@1 仓库一(前端自己项目,如果自己是前端leader
  10. www.bdplus.cn 为上线文件夹
  11. pcw pc 电脑端项目
  12. h5m h5 网页或app 中网页或公众号
  13. minstore 小程序(如果分微信和支付宝可wminstore tminstore)
  14. app 前端app 用户开发
  15. mkdown (一些备注文件)
  16. 以下为正常开发项目,以上为对应上线打包后文件
  17. w
  18. h5
  19. minstore
  20. app
  21. mkdown
  22. 如果有其他方式可自己组织
  23.  
  24. git@2 仓库二 (其他项目比如后端等)
  25. git@3 仓库三
  26.  
  27. Cmd
  28.  
  29. Copy
  30.  
  31. 查看node 版本
  32. node -v

  33. 使用nvm 进行node 版本安装与切换
  34.  
  35. 1node 版本
  36. nvm use v14
  37. Now using node v14.15.3 (npm v6.14.9)
  38. node -v
  39. v14.15.3
  40. 为了保证同步,选择node 版本14
  41. 2、开始创建项目
  42. npx create-react-app my-app
  43. 官方标准命令,my-app 为项目名称
  44. npx create-react-app scss-route-mobx
  45. ....
  46. 3git仓库提交
  47. 这块你要进行git 提交 主要在企业做项目就应该放到仓库中,如果企业没有,那自己也要弄个仓库,哪天在家改个东西,或像今年的疫情在家办公所以,只要远程仓库有代码,电脑就是另一个事了。
  48. 4cd scss-route-mobx 进入项目目录
  49. 先进入到这个项目目录
  50. 5yarn eject 开启配置文件
  51. 这时候先不着急启项目,先把配置文件开启就是webpack 这些基础配置开启
  52. 6yarn start 启动项目
  53. 这时候你再起项目。 算是勉强创建了一个项目
  54.  
  55. Cmd
  56.  
  57. Copy
  58.  
  59. 创建项目第二步 sass安装
  60.  
  61. 1sass 安装
  62. yarn add node-sass-chokidar
  63. yarn add npm-run-all
  64. 2、修改package.json
  65. "scripts": {
  66. "build-css": "node-sass-chokidar src/ -o src/",
  67. "watch-css": "npm run build-css && node-sass-chokidar src/ -o src/ --watch --recursive --use-polling --polling-interval 1000",
  68. "start-js": "node scripts/start.js",
  69. "start": "npm-run-all -p watch-css start-js",
  70. "build-js": "node scripts/build.js",
  71. "build": "npm-run-all build-css build-js",
  72. "test": "node scripts/test.js --env=jsdom"
  73. },
  74.  
  75. Cmd
  76.  
  77. Copy
  78.  
  79. 创建项目第三步 yarn build 打包注意事项
  80.  
  81. 新建一个.env文件与package.json 同在根目录下
  82. GENERATE_SOURCEMAP=false
  83. 以下三种路径
  84. PUBLIC_URL=https://www.a.com/
  85. PUBLIC_URL=./
  86. PUBLIC_URL=/
  87.  
  88. JSON
  89.  
  90. Copy
  91.  
  92. 启动成功并编译成功表示react项目创建成功
  93. 至此 一个基本的react 项目算是创建成功了
  94.  
  95. 创建项目第四步 设置代理、nginx 路由配置、跨域处理
  96.  
  97. src/setupProxy.js 创建文件
  98. yarn add http-proxy-middleware axios
  99. const { createProxyMiddleware } = require('http-proxy-middleware');
  100. module.exports = function(app) {
  101. app.use(
  102. '/home',createProxyMiddleware({
  103. target: 'https://#####.com/',
  104. changeOrigin: true,
  105. })
  106. );
  107. app.use(
  108. '/wp-json',createProxyMiddleware({
  109. target: 'https://#####.cn/',
  110. changeOrigin: true,
  111. })
  112. );
  113. };
  114.  
  115. 以下是具体某个页面中使用
  116. obj = {
  117. mediareports:{
  118. page_number:'2',
  119. page_size:'10'
  120. }
  121. }
  122. const cfg = this.state.mediareports;
  123. this.getApi('/home/mediareports',cfg,{}).then((res)=>{
  124. console.log(res.data)
  125. })
  126. this.getApi('/wp-json/wp/v2/posts',{},{}).then((res)=>{
  127. console.log(res.data)
  128. })
  129.  
  130. async getApi(url,cfg,headers){
  131. let data = await axios.get(url,{params:cfg},
  132. {
  133. headers: headers
  134. })
  135. return data;
  136. }
  137.  
  138. React JSX
  139.  
  140. Copy
  141.  
  142. 创建项目第五步 react react-router 路由
  143.  
  144. react 的文件目录是怎么样
  145. 1pubilc
  146. - index.html
  147. - favicon.ico
  148. - manifest.json
  149. 移动App的配置文件,用于指定应用的显示名称、图标、入口页面等信息.
  150. 2src
  151. - components
  152. - alert
  153. index.jsx
  154. - footer
  155. index.jsx
  156. - nav
  157. index.jsx
  158. 比如:
  159. 导航、弹出层、loading加载动画、分页器等
  160. - images
  161. 凡事页面中<img src>标签使用的图片
  162. - js
  163. 页面中编写的js功能及开发文件
  164. - store
  165. mobx
  166. context
  167. - styles
  168. img/
  169. csslessscss
  170. - unit
  171. js一些组件
  172. 比如,
  173. 如果不用jq,自己封装一些js 的方法
  174. 如果手机端有活动页面都需要下载app,同的app 的判断
  175. 如果有弹出去js
  176. - view
  177. home
  178. index.jsx
  179. about
  180. index.jsx
  181. joined
  182. index.jsx
  183. list.jsx
  184. other.jsx
  185. - other
  186.  
  187. HTML
  188.  
  189. Copy
  190.  
  191. 1、导入包
  192. yarn add react-router-dom;
  193.  
  194. PS:
  195. react-router react-router-dom
  196.  
  197. react-router: 实现了路由的核心功能。
  198. react-router-dom: 基于react-router,加入了在浏览器运行环境下的一些功能。
  199.  
  200. react-router-dom react-router 的加强版呗
  201.  
  202. 因为 React Native 也要路由系统呀。所以还有一个库叫 react-router-native,这个库也是基于 react-router 的,它类似 react-router-dom,加入了 React Native 运行环境下的一些功能。
  203.  
  204. react-router-dom
  205. react-router-native
  206.  
  207. React BrowserRouterHashRouter的区别
  208.  
  209. BrowserRouterh5路由(history API
  210. HashRouter:哈希路由
  211.  
  212. 主要区别
  213.  
  214. BrowserRouter HashRouter 都可以实现前端路由的功能
  215.  
  216. BrowserRouter 实现的是单页面的路由切换
  217. HashRouter 实现的是全局路由切换
  218.  
  219. 从原理上
  220.  
  221. HashRouter在路径中包含了#,相当于HTML的锚点定位。(# 符号的英文叫hash,所以叫HashRouter,和散列没关系哦))
  222.  
  223. BrowserRouter使用的是HTML5的新特性History,没有HashRouter(锚点定位)那样通用,低版本浏览器可能不支持。
  224.  
  225. 从用法上
  226.  
  227. BrowserRouter进行组件跳转时可以传递任意参数实现组件间的通信,而HashRouter不能(除非手动拼接URL字符串),因此一般配合Reduxmobx使用,实现组件间的数据通信。
  228.  
  229. Cmd
  230.  
  231. Copy
  232.  
  233. 2、新增加Router.js文件
  234.  
  235. import React from 'react';
  236.  
  237. import { BrowserRouter, HashRouter, Route, Link, Switch } from 'react-router-dom';
  238.  
  239. import App from './App.js';
  240.  
  241. const Router = () => (
  242. <BrowserRouter>
  243. <App/>
  244. </BrowserRouter>
  245. )
  246. export default Router;
  247. JavaScript
  248.  
  249. Copy
  250.  
  251. 3、修改index.js
  252.  
  253. App 换成
  254.  
  255. import Router from './Router';
  256.  
  257. <Router />
  258. JavaScript
  259.  
  260. Copy
  261.  
  262. 4App.js(需增加代码分割)
  263.  
  264. import React , { Component, Suspense, lazy } from 'react';
  265. import { withRouter,NavLink,Switch,Redirect,Route} from 'react-router-dom';
  266.  
  267. const Home = lazy(() => import('./views/Home'));
  268. import Input from './view/input';
  269. import Event from './view/event';
  270.  
  271. class App extends Component {
  272. render(){
  273. return (
  274. <Suspense fallback={<div>Loading...</div>}>
  275. <Switch>
  276. <Route exact path="/" component={Home} />
  277. <Route path="/input" component={Input} />
  278. <Route path="/event" component={Event} />
  279. </Switch>
  280. </Suspense>
  281. );
  282. }
  283. }
  284. export default App;
  285. JavaScript
  286.  
  287. Copy
  288.  
  289. 5、新增页面
  290.  
  291. ./view/home/index.jsx
  292. ./view/input/index.jsx
  293. ./view/event/index.jsx
  294. 内容自定义
  295.  
  296. import { withRouter,NavLink,Switch,Redirect,Route} from 'react-router-dom';
  297.  
  298. <NavLink to="/">首页</NavLink>
  299. <NavLink to="/input">表单</NavLink>
  300. <NavLink to="/event">事件</NavLink>
  301. React JSX
  302.  
  303. Copy
  304.  
  305. import React , { Component } from 'react';
  306. import { withRouter,NavLink,Switch,Redirect,Route} from 'react-router-dom';
  307. class View extends Component {
  308. render(){
  309. return (
  310. <React.Fragment>
  311. <div className="mian">这是首页面</div>
  312. <NavLink to="/">首页</NavLink><br/>
  313. <NavLink to="/input">表单</NavLink><br/>
  314. <NavLink to="/event">事件</NavLink>
  315. </React.Fragment>
  316. )
  317. }
  318. }
  319. export default View;
  320. React JSX
  321.  
  322. Copy
  323.  
  324. 创建项目第六步 Redux
  325.  
  326. 1、安装yarn add react-redux redux
  327. 2router store 注入
  328.  
  329. import {Provider} from 'react-redux';
  330. <Provider stores={store}>
  331. <App/>
  332. </Provider>
  333.  
  334. 完整代码
  335. import React from 'react';
  336.  
  337. import { BrowserRouter, HashRouter} from 'react-router-dom';
  338.  
  339. import App from './App.js';
  340.  
  341. import {Provider} from 'react-redux';
  342. import Store from './store/store.js';
  343.  
  344. const Router = () => (
  345. <BrowserRouter>
  346. <Provider store={Store}>
  347. <App/>
  348. </Provider>
  349. </BrowserRouter>
  350. )
  351. export default Router;
  352.  
  353. React JSX
  354.  
  355. Copy
  356.  
  357. 3、创建整个项目 store.js
  358. src/store/store.js
  359.  
  360. import {createStore, combineReducers} from 'redux';
  361.  
  362. import {reducer as addReducer} from './views/action/_index.js';
  363.  
  364. const reducer = combineReducers({
  365. add:addReducer,
  366. // remove:removeReducer,
  367. // edit:editReducer,
  368. })
  369.  
  370. export default createStore(reducer);
  371.  
  372. ----
  373. 我需要创建 Store.js
  374. 引入 多个 reducer (store数据片段)
  375.  
  376. combineReducers 合并整合多个reducer
  377.  
  378. 再进行 createStore()
  379. 第一参数 reducer (纯函数,返回新的state)
  380. 第二个参数 state 初始化值 null
  381. 第三个 中间件
  382.  
  383. 到这个位置
  384. router 基本不需要再修改了
  385. store 只需引入 所需 view下的页面中的reducer
  386.  
  387. createStore
  388.  
  389. React JSX
  390.  
  391. Copy
  392.  
  393. 第四步
  394.  
  395. 关于每个view 页面
  396. views
  397. home
  398. 每个页面都需要一个state
  399. state 如何生成 Reducer(返回新的state)
  400.  
  401. action
  402. 对象 return{}
  403. type 每个action 名称
  404. ActionTypes
  405. reducer
  406. 根据具体的action 名称(type对应)
  407. 来编写或计算返回新的state
  408. [...new,..state]
  409. Object.assign()
  410. 以上是具体当前view 页面内部以外的redux
  411. jsx
  412. about
  413. 每个页面都需要一个state
  414. news
  415. 每个页面都需要一个state
  416. usercenter
  417. 每个页面都需要一个state
  418. React JSX
  419.  
  420. Copy
  421.  
  422. 第五步
  423.  

如何与页面交互
导入
import {connect} from ‘react-redux’;

导出
export default connect(mapStateToProps,mapDispatchToProps)(View);

function mapStateToProps(state) {
return {
isList:state.add
}
}

state.add
add 是哪来的 就是我们Store.js
自定义的reducer
const reducer = combineReducers({
add:addReducer,
// remove:removeReducer,
// edit:editReducer,
})

isList
当前组件 this.props 可以接受到
const {onAddFn,isList,onRemoveFn} = this.props;

轻松的拿到对应 reducer 返回的 State

怎么操作 action

//是一个函数,会得到dispatch和ownProps(容器组件的props对象)两个参数。
const mapDispatchToProps = (dispatch, ownProps) => {
// const {id} = ownProps;
return {
onAddFn: () => dispatch(AddTodo(‘add’))
}
};
onAddFn: () => dispatch(AddTodo(‘add’))

dispatch 操作action

onAddFn 通过this.props 来使用
onClick = {onAddFn}
onAddFn 为自定义 在当前view 页面使用

  本章CSDN地址:https://mp.csdn.net/mp_blog/creation/editor/117437129

注:商业用途 禁止转载

react 结合gitte 创建项目(详情步骤)的更多相关文章

  1. nuxt创建项目的步骤

    nuxt创建项目的步骤 1.基本步骤 // 创建package.json依赖管理文件 npm init -y // 在package.json文件中添加运行nuxt的命令,之后npm run dev启 ...

  2. note.js使用express创建项目的步骤以及ip和端口配置

    1.安装express npm install -g express 2.创建项目 express -e 项目名称 3.打开cmd进入项目目录安装依赖 npm install 4.打开配置文件./bi ...

  3. Django创建项目基本步骤

    1.新建项目 django-admin startproject cmdb(项目名) 2.启动服务python manage.py runserver 0.0.0.0:8000(表示服务监听在8000 ...

  4. eclipse创建项目(步骤加图片)

    前言: 我曾经大学的专业是计算机科学与技术,但不曾想着走入计算机的世界,看着代码就眼晕. 为了自动化测试,不得被迫认识一下java. 1)       打开Eclipse,界面是这样的: 2)     ...

  5. react 创建项目 sass router redux

    ​ 创建项目第一步 基本搭建 在创建之前,需要有一个git 仓库,我们要把项目搭建到git 中 目录介绍 cd 到某个盘 mkdir workspace 创建workspace文件夹 cd works ...

  6. vue- Vue-Cli脚手架工具安装 -创建项目-页面开发流程-组件生命周期- -03

    目录 Vue-Cli 项目环境搭建 与 python 基础环境对比 环境搭建 创建启动 vue 项目 命令创建项目(步骤小多) 启动 vue 项目(命令行方式) 启动 vue 项目(pycharm 方 ...

  7. sass创建web项目环境步骤

    1)npm创建web前端项目环境步骤 1.新建文件夹,在该文件下进入cmd控制台2.输入命令 npm init 回车3.name:名字只支持小写,不支持大写,将大写的名字改为小写即可4.version ...

  8. react项目实践——(1)使用webpack创建项目

    1. 新建文件夹,命名为项目名称——myapp,并打开myapp文件夹. mkdir webpack-demo && cd webpack-demo 2. 在./myapp中打开命令行 ...

  9. 【HANA系列】SAP ECLIPSE中创建ABAP项目的步骤

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP ECLIPSE中创建AB ...

随机推荐

  1. 8.1 k8s使用PV/PVC做数据持久化运行redis服务,数据保存至NFS

    1.制作redis docker镜像 1.1 准备alpine基础镜像 # 下载 docker pull alpine:3.13 # 更改tag docker tag alpine:3.13 192. ...

  2. ServerBootstrap的handler()和childHandler()区别

    无论服务端还是客户端都进行了handler的设置,通过添加hanlder,我们可以监听Channel的各种动作以及状态的改变,包括连接,绑定,接收消息等. 区别: 1. handler在初始化时就会执 ...

  3. JOI 2020 Final 题解

    T1. 只不过是长的领带 大水题,把 \(a_i,b_i\) 从小到大排序. 发现最优方案只可能是大的 \(a_i\) 跟大的 \(b_i\) 匹配,小的 \(a_i\) 与小的 \(b_i\) 匹配 ...

  4. 9 — springboot整合jdbc、druid、druid实现日志监控 — 更新完毕

    1.整合jdbc.druid 1).导入依赖 <dependency> <groupId>org.springframework.boot</groupId> &l ...

  5. javaSE基础知识(走向编程的门口)— 更新完毕

    前言:玩儿编程最重要的一点:不要怕麻烦,感觉是在浪费时间: 能动手绝不哔哔:只要脑袋不傻,编程都是"一看就会,一练就废",开始学的时候,就算再基础的东西都建议手敲一遍 要有囫囵吞枣 ...

  6. MapReduce02 序列化

    目录 MapReduce 序列化 概述 自定义序列化 常用数据序列化类型 int与IntWritable转化 Text与String 序列化读写方法 自定义bean对象实现序列化接口(Writable ...

  7. 自然语言式parsing

    got NUM(1) Is NUM(1) an expr? Is NUM(1) a term? Is NUM(1) a number? is_term got -(-) -(-) was back i ...

  8. kafka安装(单机版)

    一.安装kafka(单机版) 因为现在的kafka安装包都自带zookeeper,所以如果是安装本地单机版kafka,不需要额外去安装zookeeper,使用自带的就可以了. 1.下载kafka 2. ...

  9. 【leetcode】121. Best Time to Buy and Sell Stock(股票问题)

    You are given an array prices where prices[i] is the price of a given stock on the ith day. You want ...

  10. 容器的分类与各种测试(三)——deque

    deque是双端队列,其表象看起来是可以双端扩充,但实际上是通过内存映射管理来营造可以双端扩充的假象,如图所示 比如,用户将最左端的buff用光时,map会自动向左扩充,继续申请并映射一个新的buff ...