Reasct项目笔记

123 阅读2分钟

react项目标记

创建react项目

安装create-react-app

yarn create react-app my-app

查看版本

create-react-app --version

创建react项目

create-react-app 项目名
//支持typescript的react项目创建
create-react-app 项目名 --template typescript

打开react项目

cd 项目名
yarn start

项目目录

1647681373859.png

设置路径

//如果想这样引入 import 'app.css'
//tsconfig.js添加如下
"baseUrl": "src",

项目scss安装dart-sass

因为react只支持node-sass,所以这样安装

yarn add --dev node-sass@npm:dart-sass 

css normalize(统一浏览器样式)

//index.css中引入
//统一浏览器样式
@import-normalize

使用css-in-js方案完成项目

安装styled-components,@type/styled-components

//安装style-components
yarn add styled-components 
//安装style-components代码提示
yarn add @types/style-components

使用

import {Lagout} from "./components/Lagout";
import styled from "styled-components";
const Lagout = styled.div`
      background: red;
`
function App() {
  return (
    <div className="App">
      <Lagout>
          小红
      </Lagout>
    </div>
  );
}
export default App;

使用react-router-dom设置路由官方文档

安装

yarn add react-router-dom

使用

import * as React from "react";
import * as ReactDOM from "react-dom";
import { BrowserRouter } from "react-router-dom";
import "./index.css";
import App from "./App";
import * as serviceWorker from "./serviceWorker";
ReactDOM.render(
  <BrowserRouter>
    <App />
  </BrowserRouter>,
  document.getElementById("root")
);
//App/tsx文件
import {Routes, Route, Link, NavLink} from "react-router-dom";
import {Home} from "./components/Home";
import {About} from "./components/About";
function App() {
  return (
    <div className="App">
        <Routes>
            <Route path="/" element={<Home />} />
            <Route path="about" element={<About />} />
        </Routes>
    </div>
  );
}
export default App;
//Home.tsx文件
import React from "react";
import {Link} from "react-router-dom";
const About = ()=>{
    return(
        <>
            <main>
                <h2>Who are we?</h2>
                <p>
                    That feels like an existential question, don't you
                    think?
                </p>
            </main>
            <nav>
                <Link to="/">Home</Link>
            </nav>
        </>
    )
}
export {About}
import React from 'react';
import {Link} from "react-router-dom";
const Home = ()=>{
    return(
        <>
            <main>
                <h2>Welcome to the homepage!</h2>
                <p>You can do this, I believe in you.</p>
            </main>
            <nav>
                <Link to="/about">About</Link>
            </nav>
        </>
    )
}
export {Home}

路由传参

<Route path="about:id" element={<About />} />

使用useParams()接受参数

import React from "react";
import {Link, useParams} from "react-router-dom";

const About = ()=>{
    console.log(useParams().id)
    return(
        <>
            <main>
                <h2>Who are we?</h2>
                <p>
                    That feels like an existent
                </p>
            </main>
            <nav>
                <Link to="/">Home</Link>
            </nav>
        </>
    )
}
export {About}

路由模式

我使用的是react-router-dom

路由的模式有两种

  • 老浏览器提供的 hash模式, 我们称之为: HashRouter #/
  • H5提供的的 history 模式,我们称之为 BrowserRouter / 注意: H5模式的路由需要后端支持
ReactDOM.render(
    <HashRouter>
        <App />
    </HashRouter>,
    // <BrowserRouter>
    //     <App />
    // </BrowserRouter>,

  document.getElementById('root')
);

使用SVG

  • 首先yarn eject拿到Webpack配置
//提交之后才能运行
yarn eject
或者
npm run eject
  • 然后安装svg-sprlte-loader进行配置
yarn add --dev svg-sprlte-loader
  • 安装svgo-loader
yarn add --dev svgo-loader
  • Configuration配置
{
              test: /\.svg$/,
              use: [
                { loader: 'svg-sprite-loader', options: {} },
                {loader: 'svgo-loader', options:{
                    //去除fill属性
                    plugins: [
                      {
                        name: "removeAttrs",
                        params: {
                          attrs: "(fill|stroke)"
                        }
                      }
                    ]
                  }}
              ]
            },
  • Icon组件
import React from "react";

//这里有报错
let importAll = 
    (requireContext: __WebpackModuleApi.RequireContext) => requireContext.keys().forEach(requireContext);
try {
    importAll(require.context('icons', true, /\.svg$/));
} catch (error) {
    console.log(error);
}

type Props ={
    name: string
}
const Icon:React.FC<Props> = (props) =>{
    return(
        <svg className="icon">
            <use xlinkHref={"#"+props.name}/>
        </svg>
    )
}
export default Icon

安装 @types/webpack-env解决报错

yarn add --dev @types/webpack-env

引入Icon组件即可使用图标

<Icon name='Chart'></Icon>