React脚手架项目示例

Posted 橘猫吃不胖~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了React脚手架项目示例相关的知识,希望对你有一定的参考价值。

React脚手架项目示例

1 create-react-app的使用

1.1 使用cmd创建

1、全局安装

npm install -g create-react-app


2、创建项目:

# 方法1
npm init react-app 项目名称
# 方法2
create-react-app 项目名称
# 方法3 
npx create-react-app 项目名称
# 方法4
yarn create react-app 项目名称

3、启动项目:
(1)进入项目所在的目录

cd 项目名称

(2)运行项目

# 方式1
npm start
# 方式2
yarn start


同时会打开以下网页:

4、查看目录结构

5、启动测试

# 方式1
npm test
# 方式2
yarn test


6、构建生产版本

# 方式1
npm run build
# 方式2
yarn build

1.2 使用WebStorm创建

打开WebStorm,选择最上面的File—>New—>Project。

按照以下步骤创建即可。

2 安装依赖:react-bootstrap模块

React-Bootstrap是一款基于ReactJS对Bootstrap进行封装的库,是一个可重用的前端组件库。react-bootstrap的样式组件依赖于bootstrap。

1、安装bootstrap

npm install bootstrap@3.3.7 --save

2、安装react-bootstrap(版本不宜太高,否则有些样式不识别)

npm install react-bootstrap@0.33.0 --save

3、安装css-loader astyle-loader url-loader

npm install css-loader style-loader
npm install url-loader

4、在App.css文件中引入bootstrap.css

@import "~bootstrap/dist/css/bootstrap.css";

3 【案例】在前端显示后台的数据表(在React中使用bootstrap库)

3.1 效果展示

将info数据库中的stu表显示在页面上,stu表具体如下:

案例效果展示:

3.2 编写后端代码

在WebStorm中新建一个Express项目my-app2-server,首先安装一些库:

# 安装mysql2
npm install mysql2
# 安装sequelize
npm install sequelize
# 安装cors
npm install cors

1、在bin文件夹下的www.js文件中第15行代码修改端口号,默认是3000,修改为8089,修改后代码如下:

var port = normalizePort(process.env.PORT || '8089');

2、在当前项目中创建文件夹config,在该文件夹下创建dbconfig.js文件

该文件用来创建数据库连接池,具体代码如下:

// 导入sequelize模块
const Sequelize = require("sequelize");
// 配置数据库连接对象(默认带有数据库连接池):数据库名,用户名,密码,配置
let sequelize = new Sequelize("info", "root", "123456", 
    host: "localhost", // 本机地址
    port: 3306, // 数据库端口号
    dialect: "mysql", // 数据库类型,mysql|sqlite|postgres|mssql
    pool:  // 数据库连接池
        max: 5, // 连接池中最大连接数量
        min: 0, // 连接池最小连接数量
        idle: 10000, // 如果某个线程10秒内没有被使用,则释放该线程
    
)
module.exports = sequelize; // 导出模块

3、在当前项目下新建model文件夹,在文件夹中创建studentModel.js文件

在该文件用来创建数据库模型,将数据库中的列名进行映射,代码如下:

const Sequelize = require("sequelize");
const DB = require("../config/dbconfig")

const Student = DB.define("stu", 
    id: 
        type: Sequelize.STRING,
        primaryKey: true, // 作为主键
        field: "sid" // 该属性名映射数据库中列名
    ,
    name: 
        type: Sequelize.STRING,
        allowNull: false,// 不允许为空
        field: "sname"
    ,
    age: 
        type: Sequelize.INTEGER,
        allowNull: false
    ,
    gender: 
        type: Sequelize.STRING,
        allowNull: false
    
, 
    freezeTableName: true, // 映射表的名字
    timestamps: false // 不生成时间戳
)

module.exports = Student; // 导出配置文件

4、在routes文件夹下有两个文件,接下来通过修改users.js文件部分代码来实现数据查询的操作,代码如下:

var express = require("express");
var router = express.Router();
var Student = require("../model/studentModel");

// http://localhost:8089/users/student
router.get("/student", (req, res) => 
    Student.findAll(
        raw: true // 显示时间戳
    ).then(result => 
        res.json(result); // 发送查询的结果
    ).catch(err => 
        console.log(err); // 如果查询失败显示错误
    )
)

module.exports = router;

5、最后一步,到app.js文件中进行配置跨域模块cors

// 引入cors模块
var cors = require("cors");
// 使用cors模块
app.use(cors());

3.3 编写前端代码

首先需要安装模块:

# 1、安装bootstrap
npm install bootstrap@3.3.7 --save
# 2、安装react-bootstrap(版本不宜太高,否则有些样式不识别)
npm install react-bootstrap@0.33.0 --save
# 3、安装css-loader astyle-loader url-loader
npm install css-loader style-loader
npm install url-loader
# 4、在App.css文件中引入bootstrap.css
@import "~bootstrap/dist/css/bootstrap.css";
# 5 安装axios
npm install axios

1、在src目录下新建config文件夹,在其中新建apiconfig.js文件,在该文件中将本机地址以及端口号导出,这样便于修改端口号和服务器地址,改一处就可以全部修改。

代码如下:

export const HOST = "http://localhost"; // 服务器地址
export const PORT = 8089; // 端口号

在编写代码时WebStorm可能会弹出以下提示,这时点击第三个ESLint settings…

默认选择的是第二个,表示最严格的格式检查,这时我们选择第一个Disable ESLint,点击OK即可关闭。


2、在src目录下新建文件夹components,用来存放编写的组件。在其中新建文件夹home.js(扩展名也可以为.jsx)

代码如下:

import React from "react";
import Table, Button, Glyphicon from "react-bootstrap";
import HOST, PORT from "../config/apiconfig";
import "./home.css"; // 引入表格的CSS样式
import axios from "axios"; // 或者写成import $http from "axios";

// 创建类组件
class UserTable extends React.Component 
    constructor(props) 
        super(props);
        // 定义状态机
        this.state = 
            data: []
        
    

    componentDidMount()  // 执行完render执行该函数
        const _this = this;
        axios.get(`$HOST:$PORT/users/student`)
            .then(res => 
                _this.setState(
                    data: res.data // 从后端接收到的result存放在数组data中
                )
            ).catch(err => 
            console.log(err);
        )
    

    // render函数中编写表格
    render() 
        const data = this.state; // 将状态机中的data通过解构赋值取出来,便于后续操作遍历data中的数据
        return (
            <div>
                /*bordered表示带边框,striped表示隔行变色,hover表示鼠标悬停效果*/
                <Table bordered striped hover>
                    <thead>
                    <tr>
                        <th width=100>学号</th>
                        <th width=100>姓名</th>
                        <th width=100>年龄</th>
                        <th width=100>性别</th>
                        <th width=200 colSpan=2>操作</th>
                    </tr>
                    </thead>
                    <tbody>
                    /*由于取到的数据不止一个,使用可以将数据挨个遍历出来*/
                    
                        // 先将数据遍历出来,然后添加到表格中
                        // map表示数组中的每一个元素都要执行回调函数
                        data.map((user) => 
                            return (
                                // 多行数据需要有一个key属性,否则会报错
                                <tr key=user.id>
                                    /*参数值与后台相对应,而不是与数据库对应*/
                                    <td>user.id</td>
                                    <td>user.name</td>
                                    <td>user.age</td>
                                    <td>user.gender</td>
                                    <td>
                                        /*link表示超链接按钮,small表示为小按钮*/
                                        <Button bsStyle="link" bsSize="small">
                                            /*Glyphicon表示图标*/
                                            <Glyphicon glyph="edit"/>编辑
                                        </Button>
                                    </td>
                                    <td>
                                        <Button bsStyle="link" bsSize="small">
                                            <Glyphicon glyph="remove"/>删除
                                        </Button>
                                    </td>
                                </tr>
                            )
                        )
                    
                    </tbody>
                </Table>
            </div>
        )
    


export default UserTable; // 导出组件

3、在App.js文件中导入刚刚编写的类组件,删除一部分文件中已经编写好的代码,将编写好的类组件写进去,代码如下:

import logo from './logo.svg'; // 原本React的logo
import './App.css';
import UserTable from "./components/home"; // 自己编写的类组件

function App() 
    return (
        <div className="App">
            <header className="App-header">
                <img src=logo className="App-logo" alt="logo"/>
                <UserTable/>
            </header>
        </div>
    );


export default App;

4、由于当前页面展示效果不太好看,因此我们还需要对CSS样式做一些调整。在components文件夹下新建文件home.css,为刚刚编写的表格做一些样式上的修改,代码如下:

/*为表格头部编写样式*/
tr > th 
    /*文本居中*/
    text-align: center;
    /*文字颜色为黑色*/
    color: black;
    /*修改字体大小*/
    font-size: 20px;


/*为普通单元格编写样式*/
td 
    color: red;
    font-size: 15px;

这时将该文件引入到home.js文件中,刷新网页就可以看到效果。

5、最后一步,将该网页目前的效果稍作修改,找到App.css文件,修改后代码如下:

@import "~bootstrap/dist/css/bootstrap.css";

.App 
    text-align: center;


.App-logo 
    height: 20vmin;
    pointer-events: none;


.App-header 
    background-color: white;
    min-height: 100vh;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    font-size: calc(10px + 2vmin);
    color: white;

启动服务器,启动React项目,就可以看到当前页面的效果:

以上是关于React脚手架项目示例的主要内容,如果未能解决你的问题,请参考以下文章

React系统学习1(入门使用和基础概念)

React脚手架项目示例

用react脚手架新建项目

从零开始搭建 creact-react-app 脚手架

如何使用脚手架搭建一个react项目

React脚手架搭建最基础的React项目