搭建一个 Vite 版 React 项目
Vite简介
Vite (法语意为 "快速的",发音 /vit/) 是一种新型前端构建工具,能够显著提升前端开发体验,它主要由两部分组成:
一个开发服务器,它利用 原生 ES 模块 提供了 丰富的内建功能,如速度快到惊人的 模块热更新(HMR)。
一套构建指令,它使用 Rollup 打包你的代码,预配置输出高度优化的静态资源用于生产。
Vite 意在提供更开箱即用的配置,同时它的 插件 API 和 JavaScript API 带来了高度的可扩展性,并完全支持类型化。
搭建一个vite版React项目
npm init @vitejs/app vite-react -- --template react
执行完毕后,我们的目录是这样的

启动 
启动之前需要yarn或者npm install
 npm run dev
启动成功 


引入react路由
安装react-router-dom 
 yarn add react-router-dom
src 文件夹下 
创建routes文件夹 并且创建index.jsx

创建views文件夹,并创建home/demo文件及文件夹 并且创建index.jsx
src/routes/index.jsx 
import React from 'react';
import { Route, Redirect, Switch } from 'react-router-dom';
import Demo from '../views/Demo/index';
import Home from '../views/Home/index';
const routerList = () => (
  <Switch>
    <Route path="/" render={() => <Redirect to="/home" />} exact key="first" />
    <Route path="/demo" component={Demo} key="demo" />
    <Route path="/home" component={Home} key="home" />
  </Switch>
);
export default routerList;
App.js 
import React from 'react';
 + import Routes from './routes';
 + import { BrowserRouter } from 'react-router-dom';
import './App.css';
function App() {
  return (
   + <BrowserRouter>
   +   <Routes />
   + </BrowserRouter>
  );
}
export default App;
引入stylus
安装stylus 
yarn add stylus
在目录下 创建****.module.styl的文件夹 
vite提供了内置支持.scss,.sass,.less,.styl和.stylus文件。无需为其安装Vite专用插件

在index.jsx里引入 
您还可以通过.module在文件扩展名之前添加CSS模块和预处理
import React, { useEffect, useState } from 'react';
+ import styles from './index.module.styl';
const Index = ({ history }) => {
 return (
   <>
    + <div className={styles.wrap}>
       this is home page
       <br />
       <button onClick={() => history.push('/home')}>跳转到home</button>
       <button onClick={() => history.push('/demo')}>跳转到demo</button>
     </div>
   </>
 );
};
export default Index;
引入rematch
安装 
yarn add @rematch/core
在src下创建store文件夹并创建index.js文件 
import { init } from '@rematch/core';
import createLoadingPlugin from '@rematch/loading';
const demoStore = {
  state: {
    status: false,
  }, // initial state
  reducers: {
    result(state, payload) {
      return Object.assign({}, state, payload);
    },
  },
  effects: (dispatch) => ({}),
};
const loadingPlugin = createLoadingPlugin({ asNumber: true });
const configureStore = () =>
  init({
    plugins: [loadingPlugin],
    models: {
      demoStore,
    },
  });
export default configureStore;
-App.js
import React from 'react';
import Routes from './routes';
import { BrowserRouter } from 'react-router-dom';
+ import { Provider } from 'react-redux';
+ import store from './store/index';
import './App.css';
function App() {
  return (
   + <Provider store={store}>
      <BrowserRouter>
        <Routes />
      </BrowserRouter>
    +</Provider>
  );
}
export default App;推荐阅读:
更新不易,点个“在看”和“赞”吧(●'◡'●)!
评论

