React

react 路由、移动端适配以及less配置

2020-06-18  本文已影响0人  郭先生_515

一. 路由设置

首先 react 配置路由需要引入 react-router-dom 依赖:

yarn add react-router-dom -S or npm i react-router-dom -S 

引入依赖之后,配置路由文件:

src下创建components文件夹以及Home.jsx和Login.jsx:

// App.js

import React, { Component } from 'react';
// 引入路由
import { BrowserRouter as Router, Route, Link } from 'react-router-dom';

// 路由页面
import Home from './components/Home';
import Login from './components/Login';

class App extends Component {
    constructor(props) {
        super(props);
        this.state = {  }
    }
    render() { 
        return (
            <Router>
                <ul className="topBar">
                    <li><Link to="/">Home</Link></li>
                    <li><Link to="/login">Login</Link></li>
                </ul>
                <Route exact path="/" component={Home}/>
                <Route path="/login" component={Login}/>
            </Router>
        );
    }
}
export default App;

最后写好Home和Login页面相关内容。

二. 移动端适配

在 react 项目中做移动端适配,也需先引入先关依赖:

yarn add lib-flexible -S
yarn add postcss-px2rem -S 

依赖安装完成之后,需要使用 yarn eject 命令暴露项目相关的webpack配置文件,找到webpack.config.js,并做修改:

首先在webpack.config.js中引入:

const px2rem = require('postcss-px2rem');

然后在一下代码的位置,设置根目录字体大小:

options: {
          // Necessary for external CSS imports to work
          // https://github.com/facebook/create-react-app/issues/2677
          ident: 'postcss',
          plugins: () => [
            require('postcss-flexbugs-fixes'),
            require('postcss-preset-env')({
              autoprefixer: {
                flexbox: 'no-2009',
              },
              stage: 3,
            }),
            // Adds PostCSS Normalize as the reset css with default options,
            // so that it honors browserslist config in package.json
            // which in turn let's users customize the target behavior as per their needs.
            postcssNormalize(),
    
            // 移动端适配
            px2rem({ remUnit: 37.5 })
          ],
          sourceMap: isEnvProduction && shouldUseSourceMap,
        },

然后,在index.js文件中引入:

import 'lib-flexible';

最后,重启项目,在调试中看到 “将根据已有的meta标签来设置缩放比例” 字幕,即表示适配成功。

三. 引入less

同样,首先引入less 和 less-loader 相关配置:

yarn add less less-loader -S

然后,在webpack.config.js 文件中找到 style files regexes 这个位置, 并配置 less 相关规则:

const cssRegex = /\.css$/;
const cssModuleRegex = /\.module\.css$/;
// 引入less
const lessRegex = /\.less$/;
const lessModuleRegex = /\.module\.less$/;

const sassRegex = /\.(scss|sass)$/;
const sassModuleRegex = /\.module\.(scss|sass)$/;

然后在getStyleLoaders方法处, 模仿cssOptions,引入lessOptions,并调用,如下:

const getStyleLoaders = (cssOptions, lessOptions, preProcessor) => {
    const loaders = [
      isEnvDevelopment && require.resolve('style-loader'),
      isEnvProduction && {
        loader: MiniCssExtractPlugin.loader,
        // css is located in `static/css`, use '../../' to locate index.html folder
        // in production `paths.publicUrlOrPath` can be a relative path
        options: paths.publicUrlOrPath.startsWith('.')
          ? { publicPath: '../../' }
          : {},
      },
      {
        loader: require.resolve('css-loader'),
        options: cssOptions,
      },
      {
        loader: require.resolve('less-loader'),
        options: lessOptions,
      },
      ... // 省略以下代码
}

最后在大概440行处,模仿cssRegex和cssModuleRegex,引入lessRegex和lessModuleRegex,如下:

            {
              test: cssRegex,
              exclude: cssModuleRegex,
              use: getStyleLoaders({
                importLoaders: 1,
                sourceMap: isEnvProduction && shouldUseSourceMap,
              }),
              // Don't consider CSS imports dead code even if the
              // containing package claims to have no side effects.
              // Remove this when webpack adds a warning or an error for this.
              // See https://github.com/webpack/webpack/issues/6571
              sideEffects: true,
            },
            // Adds support for CSS Modules (https://github.com/css-modules/css-modules)
            // using the extension .module.css
            {
              test: cssModuleRegex,
              use: getStyleLoaders({
                importLoaders: 1,
                sourceMap: isEnvProduction && shouldUseSourceMap,
                modules: {
                  getLocalIdent: getCSSModuleLocalIdent,
                },
              }),
            },

            // 引入less
            {
              test: lessRegex,
              exclude: lessModuleRegex,
              use: getStyleLoaders({
                importLoaders: 1,
                sourceMap: isEnvProduction && shouldUseSourceMap,
              }),
              sideEffects: true,
            },
            {
              test: lessModuleRegex,
              use: getStyleLoaders({
                importLoaders: 1,
                sourceMap: isEnvProduction && shouldUseSourceMap,
                modules: {
                  getLocalIdent: getCSSModuleLocalIdent,
                },
              }),
            },

最后,重启项目,引入less文件,即可。

上一篇下一篇

猜你喜欢

热点阅读