zoukankan      html  css  js  c++  java
  • 【招聘App】—— React/Nodejs/MongoDB全栈项目:项目准备

    前言:最近在学习Redux+react+Router+Nodejs全栈开发高级课程,这里对实践过程作个记录,方便自己和大家翻阅。最终成果github地址:https://github.com/66Web/react-antd-zhaoping,欢迎star。


    一、项目概述

     

    二、需求分析

          

    • 文件架构和规范
    1. src目录:前端源码目录
    2. server目录:后端express目录
    3. 根据功能文件夹:componentcontainerreducers
    • router划分页面方式
    1. 进入应用时获取用户信息,用户未登录跳转login页面
    2. Login和reigster页面不需要权限认证
    3. 用户信息,聊天列表,职位列表页面共享底部tabbar
    • 其它注意事项
    1. Mongodb字段设计
    2. axios发送异步请求
    3. redux管理所有数据,组件尽量用antd-mobile,弱化css

    三、React开发环境

    • Ceate-reacp-app脚手架生成文件格式
    1. 官网:https://github.com/facebookincubator/create-react-app
    2. 全局安装:
      npm install -g create-react-app  
    3. 新建项目:
      create-react-app my-project  
    4. 开启调试环境:
      npm start  
    5. 查看调试页面:浏览器访问localhost:3000
    • 脚手架命令
    1. 安装第三方库redux:
      npm install redux --save  
    2. 弹出配置文件,自定义配置webpack:
      npm run eject  
    3. 扩展package.json里的script字段,扩展npm run命令

    四、ES6常用语法

    • ES6是新的JavaScript语法规范
    1. 使用babel语法转换器,支持低端浏览器
    2. 流行的库基本都属于ES6构建,React默认使用ES6新语法开发
    • ES6语法概述:块级作用域、字符串、函数、对象扩展、解构、类、模块化

    五、AntD-Mobile组件库 

    • 蚂蚁金服出品的UI组件库:antdesignPC端使用,ant-mobile移动端使用
    • Ant Design Mobile:一个基于 Preact / React / React Native 的 UI 组件库
    1. 官网:https://mobile.ant.design/index-cn   【AntUI文档
    2. 安装:
      npm install antd-mobile --save
      //或使用yarn更块
      yarn add antd-mobile --save  
    • 使用组件
      import {Button} from 'antd-mobile'
      import 'antd-mobile/dist/antd-mobile.css' //全部加载 
    • 按需加载
    1. 安装babel-plugin-import(之后就可以不用引入css)
      yarn add babel-plugin-import --save
    2. 配置:修改package.json中的bable
      "plugins":[
          ["import", { "libraryName": "antd-mobile", "style": "css" }] // `style: true` 会加载 less 文件
      ]
    3. 个性化配置需要执行
      npm run eject  
    • 兼容Web和ReactNative
    • 常用组件:Import后可以直接使用
    1. Layout 布局组件
    2. 表单组件,数据展示组件,选择器等等
    3. 操作组件

    六、前后端联调

    • 使用axios发送异步请求
    • axios:简洁好用的发送请求库

      npm install axios --save
    • 如何发送:端口不一致,使用proxy配置转发
    1. package.json中:使用proxy统一端口
      "proxy":"http://localhost:9093" //所有端口都转换到9093   
    2. 获取数据(不使用redux的情况)
      import axios from 'axios'
      
      constructor(props){
          super(props)
          this.state = {
               data: {}
          } 
      }
      
      componentDidMount(){
           axios.get('/data')
              .then(res => {
                      if(res.status == 200){
                         this.setState({data: res.data})
                      } 
                      //console.log(res)
             }) 
      }
      
      <h2>我的名字是{this.state.data.user}</h2>  
    • 使用redux获取数据
    1. redux.js中:使用异步数据
      import axios from 'axios'
      
      const USER_DATA = 'USER_DATA'
      
      const initState = {
              user: '李云龙',
              age: 20
      }
      export function auth(state=initState,action){
              switch(action.type){
                   case USER_DATA:
                        return {...state, ...action.payload}
                   default:
                        return state  
              }
      }
      
      //获取异步数据:axios.get,post发送请求,返回promise对象;Redux里获取数据,然后dispatch即可
      export function getUserdata(){
              //dispatch用来通知数据修改
              return dispatch => {
                   axios.get('/data')
                     .then(res => {
                        if(res.status == 200){
                          dispatch(userData(res.data)
                        }    
                        //console.log(res)
                   })    
              }
      }
      export function userData(data){
              return {type:USER_DATA, payload:data}
      }  
    2. Auth.js中:渲染页面

      import {connect} from 'react-redux'
      
      import {getUserData} from './Auth.redux'
      
      componentDidMount(){
             this.props.getUserData()
      }
      
      <h2>我的名字是{this.props.user},年龄{this.props.age}</h2>
      
      Auth = connect()(Auth) 
      export default Auth;  
    • axios拦截器,统一loading处理
    1. config.js中:专门配置axios,Axios.interceptors设置拦截器,比如全局的loading

      import axios from 'axios'
      import {Toast} from 'antd-mobile'  //轻提示
      
      //拦截请求
      axios.interceptors.request.use(function(config){
               Toast.loading('加载中',0)
               return config
      })
      
      //拦截响应
      axios.interceptors.response.use(function(config){
               Toast.hide()
               return config
      })
    2. index.js中:应用axios和antd配置

      import './config'
      import 'antd-mobile/dist/antd-mobile.css'
      

    七、项目环境搭建

    • 安装
      yarn  add  antd-mobile   babel-plugin-import  axios  express、
                 mongoose  react-redux  redux   redux-thunk
                 redux-devtools-extension   cookie-parser  --save
      
      yarn add babel-plugin-transform-decorators-legacy --save-dev
    • 配置

      "babel": {
          "presets": [
            "react-app"
          ],
          "plugins": [
            [
              "import",
              {
                "libraryName": "antd-mobile",
                "style": "css"
              }
            ],
            ["@babel/plugin-proposal-decorators",
              { "legacy": true }
            ]
          ]
        },
        "proxy":"http://localhost:9093"
    • reducer.js:合并所有reducer的文件

      //合并所有reducer,并且返回
      import {combineReducers} from 'redux'
      
      export default combineReducers({})  //暂无reducer  

    注:项目来自慕课网

  • 相关阅读:
    UIImageView添加圆角
    iOS开发之NSRunLoop的进一步理解
    OC与Swift混编
    源码:自己用Python写的iOS项目自动打包脚本
    iOS 自定义Tabbar实现push动画隐藏效果
    IOS开发基础篇--CAShapeLayer的strokeStart和strokeEnd属性
    Swift 之 函数与闭包的应用实例
    Facebook iOS App如何优化启动时间
    iOS 中的 Deferred Deep Linking(延迟深度链接)
    Cocos2d-x使用UserDefault数据持久化实例:保存背景音乐和音效设置
  • 原文地址:https://www.cnblogs.com/ljq66/p/10263536.html
Copyright © 2011-2022 走看看