【React】做一个百万答题小项目

本文介绍了如何使用React和Redux构建一个百万答题小项目。涵盖了安装框架、数据库配置、Express数据获取、Redux Store配置及Store到props的映射等步骤。重点讲解了在项目中如何使用Redux管理状态,包括异步数据请求、state操作函数设置以及组件与store的绑定。
摘要由CSDN通过智能技术生成
  • 因为这个小项目是按照开源项目实现的,所以只了解React和Redux实现方式就好,相关的引入框架和后台数据库相关暂时先不解释。(主要是没时间了,肝deadline。。。)

1.安装框架和依赖

用的是蚂蚁ant框架

npm install antd-mobile --save

然后导入样式

import {
    Button } from 'antd-mobile';
import 'antd-mobile/dist/antd-mobile.css'; 

还要安装插件

npm install  babel-plugin-import --save

相关配置

npm run eject

package.json

"babel": {
   
    "presets": [
      "react-app"
    ],
    "plugins": [
      ["import", {
    "libraryName": "antd-mobile", "style": "css" }]
    ]
  }

项目数据

  1. 数据导入:
    Quizzes.json文件导入数据库。首先创建数据库,右键点击表,选择导入文件,文件导入json文件,后面一键跳过就行,最后一步点击完成。
  2. 创建服务器:
npm init 
cnpm install express --save
cnpm install mysql --save

创建index.js文件

  1. 前端依赖
    需要安装的内容:axios,react-router-dom,redux,react-redux,

相关目录树

在这里插入图片描述

2.数据库配置

  • sql.js
    设置连接,新建连接对象,let con = mysql.createConnection(connection);并定义promise对象查询的方法,返回为promise对象。
const mysql = require('mysql');

//配置连接
//这个自己设置哈
const connection = {
   
  host: 'localhost',
  post: '3306',
  user: 'root',
  password: 'root',
  database: 'timu'
};

//创建连接对象
//let con = mysql.createConnection(connection);

//连接
// con.connect(err => {
   
//   if (err) {
   
//     console.log('数据库连接失败');
//   } else {
   
//     console.log('数据库连接成功');
//   }
// });

//创建promise对象查询方法

function queryFn(sqlStr, arr) {
   
  //创建连接对象
  let con = mysql.createConnection(connection);
  return new Promise((resolve, reject) => {
   
    //找到了就返回并断开连接,没找到就拒绝连接
    con.query(sqlStr, arr, (error, result) => {
   
      if (error) {
   
        reject(error);
      } else {
   
        resolve(result);
        con.end()
      }
    });
  });
}

module.exports = queryFn;

3.express实现数据获取

  • 通过express()前端页面的路由监听进行对应后端数据库端口的数据获取
  1. 创建express对象并绑定前端页面端口,为了传输数据
  2. 端口监听事件绑定过后就要进行页面URL的路由绑定,比如对这个路由'/api/rtimu/'进行数据的获取
  3. 这里通过异步请求进行获取,因为获取时是跨域的页面是“8080”端口但是服务器端是“3306”所以要进行跨域请求设置res.append("Access-Control-Allow-Origin","*") res.append("Access-Control-Allow-Content-Type","*")
  4. 通过sql语句进行数据库操作,这里sqlQuery的promise对象建立时就已经连接上数据库啦
  5. 然后数据转成json就可以给前端的store用啦

网页服务端的index.js

var express = require('express')
var app = express()
var sqlQuery = require('./sql')

app.get('/',(req,res)=>{
   
    res.send("这是答题API服务器")
})

//如果要获取第几页的数据 就 /:page
app.get('/api/rtimu/',async (req,res)=>{
   
    //随机获取10个题目;
    //console.log(req.query)
    //跨域请求
    res.append("Access-Control-Allow-Origin","*")
    res.append("Access-Control-Allow-Content-Type","*")
    //判断存不存在 存在就是page不存在就默认设为2
    let page = req.query.page?req.query.page:2;
    let strSql = `select * from quizzes limit ${
     page*10},10`;
    //这里要用到异步
    let result = await sqlQuery(strSql)
    //console.log(result)
	//Array.from(result)从一个类似数组或可迭代对象创建一个新的,浅拷贝的数组实例
    res.json(Array.from(result));


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值