如何搭建React项目详解

一、环境配置

1、安装 Node.js >=10(选择自己需要的版本)
运行 node -v查看版本,如果不是 10,请先卸载当前版本去 Node.js 官网下载10.12.0版的安装包,一路点击下一步,注意安装目录可以改,一定不要在路径中出现中文和空格。
注意重装 Node.js 后,你以前用 npm 或 yarn 全局安装的命令可能都会消失不见,如果你需要,可以需要重新全局安装这些命令。打开 Git Bash或cmd,依次输入以下命令,按回车:
npm config set registry https://registry.npm.taobao.org/
npm config set loglevel http
npm config set progress false

2、安装yarn(yarn比npm更加好用)
打开 Git Bash,输入以下命令,按回车。
npm install -g yarn

3、安装yarn淘宝源(下载依赖更快,否则你就体验一下等待痛苦)
yarn设置镜像:
yarn config set registry https://registry.npm.taobao.org -g

二、开始搭建React项目

(1)、安装和运行
yarn create react-app morney --template typescript创建目录morney,添加template typescript说明项目需要用TS进行,看你是否需要用TS,不用则不用写。
cd morney进入项目
yarn start运行项目(自动打开浏览器)

注意:当有一个项目打开了,如果不喜欢再次运行再打开一个浏览器,就运行
echo 'BROWSER=none' > .envyarn start
git rm -rf --cached .idea如果用 WebStorm,就在 .gitignore 添加 /.idea
git rm -rf --cached .vscode如果用 VSCode,就在 .gitignore 添加 /.vscode

(2)、目录说明


3.png

4.png

(3)、配置css normalize
做法就是在index.css添加@import-normalize,作用是保证页面在不同浏览器上默认样式相近,编辑器有可能不认识这个语法会报错,无视即可。

(4)、配置scss
使用dart-sass代替node-sass(后者经常被墙,在react项目中经常存在各种问题需要解决才能正常使用)
yarn add --dev node-sass@npm:dart-sass
上述命令作用是用dart-sass代替node-sass,安装完成之后,将所有 .css改成 .scss即可。如果你想用node-sass,也是可以的,出了问题自行搜索解决问题即可。

对比:在Vue项目中用@表示src/目录,而在Reac项目中不一样:
1、css引入:可以直接用@import 'xxx/yyy'来引入src/xxx/yyy.scss(webstorm编辑器中如果路径出现红色,右键点击src,选择mark direcotory as Resource Root )
2、js引入:在tsconfig.json 添加一行"baseUrl":"src",就可以直接引用 import 'xxx/yyy.tsx'来引入src/xxx/yyy.tsx

(5)、配置styled-components(css-in-js的一种方案比scss更好玩的css写法)

yarn add styled-components
yarn add --dev @types/styled-components
前者是 styled-components源码,后者安装的是TS对应的类型声明文件。同时WebStorm最好安装一个插件:Styled Components & Styled JSX,如果是VScode则安装插件:vscode-styled-components

(6)、配置路由
官方文档
yarn add react-router-dom
yarn add --dev @types/react-router-dom

前者是 react-router-dom源码,后者安装的是TS对应的类型声明文件。安装完成之后,直接按照文档给的APP的例子,复制到自己项目APP中运行一次是否正常,然后修改成自己路由路径。

import React from "react";
import {BrowserRouter as Router,Switch,Route,Link} from "react-router-dom";
export default function App() {
  return (
    <Router>
      <div>
        <nav>
          <ul>
            <li>
              <Link to="/">Home</Link>
            </li>
            <li>
              <Link to="/about">About</Link>
            </li>
          </ul>
        </nav>
        <Switch>
          <Route path="/about">
            <About />
          </Route>
          <Route path="/">
            <Home />
          </Route>
        </Switch>
      </div>
    </Router>
  );
}

function Home() {
  return <h2>Home</h2>;
}

function About() {
  return <h2>About</h2>;
}

注意是的是:react-router-dom版本是6的,就没有switch这个需要改成Routes,另外<Route path="/about"><About /></Route>改成<Route path="/About " element={<About />}/>。另外一个解决方法删除当前版本,选择低版本5进行就行。

import React from "react";
import {BrowserRouter as Router,Routes,Route,Link} from "react-router-dom";
function App() {
  return (
    <Router>
      <div>
        <nav>
          <Link to="/">Home</Link>
          <Link to="/about">About</Link>
          </nav>
        <Routes>
          <Route path="/" element={<Home/>}/>
          <Route path="/about" element={<About/>}/>
        </Routes>
      </div>
    </Router>
  );
}
function Home() {
  return <h2>Home</h2>;
}
function About() {
  return <h2>About</h2>;
}
export default App;

Router 有两种模式:History 和 Hash
如果你没有后台服务器,就只能用 Hash
如果你有后台服务器,配置所有路径都到首页才能用 History

要改成Hash模式可以将引入的browserRouter as Router改成HashRouter as Router。改完之后区别就是看路径有没有多出一个#号,修改路径也只能改#号后面内容

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268