• 搭建一个react项目


    搭建react整体框架

    1、电脑里新建文件夹,用vscode打开文件夹
    2、npm create react-app 项目名称    如 npm create react-app huihuidemo / yarn create react-app huihuidemo
    3、cd 项目名称    如 cd huihuidemo
    4、npm run start
    5、安装antd    cnpm i antd -S / yarn add antd 
    6、在css文件中最顶部引入  @import '~antd/dist/antd.css';   //分号不能丢
        (也可在js文件里直接引入,  import 'antd/dist/antd.css';  )
    7、在js jsx文件中引入需要使用的组件   import {Button,Icon...} from 'antd';
    8、(以后必要,见下方)安装路由和ajax请求插件
    
    具体可见antd官网   https://ant.design/docs/react/use-with-create-react-app-cn
    
    解决react脚手架不支持less的问题
    1、安装less相关包    cnpm i less less-loader -S / yarn add less less-loader 
    2、暴露webpack    npm run eject / yarn eject   (此语句执行后会有config和scripts文件夹生成)   
          若出现以下错误: (Remove untracked files, stash or commit any changes, and try again.)
          是因为我们使用脚手架创建一个项目的时候,自动给我们增加了一个.gitignore文件,而我们本地却没有文件仓库
          这样解决: 先输入  git add .      再输入  git commit -m 'up' 之后再yarn eject即可
    3、查找到config/webpack.config.js的const cssRegex = /.css$/;  做出如下改动
        - const cssRegex = /.css$/;
        + const cssRegex = /.(css|less)$/;
    4、找到webpack.config.js的const loaders ,在里面最后一组后面添加
        { loader: require.resolve('less-loader') },
    添加之后是这样的:
    
    const loaders = [
          isEnvDevelopment && require.resolve('style-loader'),
          isEnvProduction && {...
           },
          {...
          },
          {...
          },
          {
            loader: require.resolve('less-loader')
          },
        ].filter(Boolean);
    
    然后重启项目即可(记得要重启项目,否则不生效)
    5、下载必须的安装包:npm i axios -S      npm i react-router-dom -S     npm i react-cookies -S
    6、npm run start 开启项目吧
    
    ps:若npm start失败,出现这个问题(Build fails after eject: Cannot find module '@babel/plugin-transform-react-jsx' )
    则可以
    1、删除 node_modules 文件夹
    2、运行 yarn
    3、cnpm i less less-loader -S / yarn add less less-loader
    3、重新 npm start / yarn start
    

    react项目文件层次架构

    config
    public
      |__static
           |__ueditor  //百度编辑器
    scripts
    src
    |__utils    //封装的公共机制,共用组件 
         |__iconfont.js  //配置iconfont的链接   
    |__api   //配置接口的地方
         |__config.js  //配置服务器地址
         |__index.js  //引入接口并暴露
         |__statecode.js  //错误提醒状态码模块
         |__login.js  //登录模块接口
    |__image 
    |__pages   //用于存放项目的各个模块页面
         |__usercenter  //用户中心模块
               |__userlogin.js   
               |__userchange.js
               |__usercenter.less   //用户中心模块less
               |__usercenterRouter.js  //用户中心模块的路由
         |__order  //订单模块
               |__details.js
               |__userorder.js
               |__order.less  
               |__orderRouter.js
         |__commodity
               |__commodityList.js
               |__commodityPrice.js
               |__commodity.less
               |__commodityRouter.js  
         |__common.less  //用于存放公共样式
         |__index.js    //首页,Link一般在此页
         |__index.less   //首页的less
    |__index.js
    |__index.css
    |__router.js  //总路由部分
    |__app.js   //设置最顶级路由
    
    src/utils/iconfont.js
    module.exports={
            iconUrl:"//at.alicdn.com/t/font_8d5l8fzk5b87iudi.js"   //注意这里是js后缀的链接,不要用css后缀的那个链接
        }
    
    src/api/config.js
    module.exports={
        base:"http://demo.huihui.net:8000"
    }
    
    src/api/index.js
    import codes from './statecode.js';  //状态码页面
    import login from './login.js';  //登录页面相关
    import userCenter from './userCenter.js';  //用户中心
    
    export default {
        stateCode:codes,
        ...login,
        ...userCenter,
    }
    
    src/api/statecode.js
    export default{
        "-1":"服务异常",
        "0":"成功",
        "1001":"参数错误",
        "1002":"用户名或密码错误",
        "1003":"验证码错误",
        "1004":"两次密码不一致",
        "1005":"账号已存在",
    }
    
    src/api/login.js
    import axios from 'axios';
    import { base } from "./config.js";
    import { message  } from 'antd';
    import cookie from 'react-cookies'
    
    export default {
      //用户登陆
      async login(params){
        return  await axios.post(`${base}/User/login`,params).then((res)=>{
          return res.data;
        }).catch((error)=>{
          message.error('服务器出错')
        });
      },
    }
    
    src/app.js
    import React, { Component } from 'react';
    
    export default class App extends Component {
      render() {
        return (
          <div>
            {this.props.children}
          </div>
        );
      }
    }
    
    src/pages/order/order.js
    import React from 'react';
    import './order.less';
    import '../common.less';
    
    import {Card} from 'antd';
    
    export default class QuickOrder extends React.Component{
    
        render(){
    
            return(
                <div className="quickOrder">
                    <div className="container">
                        <div className="content">
                            <Card title="快速打单">
    
                            </Card>
                        </div>
                    </div>
                </div>
            );
        }
    }
    
    src/pages/order/orderRouter.js
    import React from 'react';
    import {Route,Switch,Redirect} from 'react-router-dom';
    
    //快速打单
    import QuickOrder from './quickOrder';
    //退款维权
    import RefundRights from './refundRights';
    //评价管理
    import ReviewManage from './reviewManage';
    //订单详情
    import OrderDetails from './orderDetails';
    
    export default class OrderRouter extends React.Component{
    
        render(){
    
            return(
                <div>
                    <main>
                        <Switch>
                            <Route path="/store/order/quickOrder" component={QuickOrder} />
                            <Route path="/store/order/refundRights" component={RefundRights} />
                            <Route path="/store/order/reviewManage" component={ReviewManage} />
                            <Route path="/store/order/orderDetails/:id" component={OrderDetails} />
                            <Redirect to="/store/order" />
                        </Switch>
                    </main>
                </div>
            );
        }
    }
    
  • 相关阅读:
    I/O FileInputStream 字节类型文件输入输出流 (汉字显示乱码)
    Date 获取日期 SimpleDateFormat
    Random 随机生成数
    String StringBuffer Arrays 字符串修改 拼接
    Math
    装箱 拆箱Integer .ValueOf()
    LinkedListTest
    springboot cache
    耀眼的明星--项羽
    耀眼的明星--百年虚云
  • 原文地址:https://www.cnblogs.com/huihuihero/p/10990394.html
Copyright © 2020-2023  润新知