React脚手架搭建

栏目: 服务器 · 发布时间: 5年前

内容简介:之前的为了更贴近实际开发,本次 React + antd 模板完善了一些功能。node 服务和 React+antd 模板是没有多大的关系的。本文只是想通过一个简单的登陆逻辑来演示以上的功能,所以 node 服务不是必须的。

前言

之前的 multi-spa-webpack-cli 只是为 React + antd 模板提供了开发时必要的环境,对于实际的开发并没有什么用处。

为了更贴近实际开发,本次 React + antd 模板完善了一些功能。

  1. 封装 fetch ,新增请求错误提示;
  2. 集成 react-router-dom 路由管理;
  3. 集成 react-redux 状态管理;
  4. 必不可少的 antd 集成;
  5. node 服务集成(可选)。

node 服务和 React+antd 模板是没有多大的关系的。本文只是想通过一个简单的登陆逻辑来演示以上的功能,所以 node 服务不是必须的。

multi-spa-webpack-cli 已经发布到 npm,只要在 node 环境下安装即可。

npm install multi-spa-webpack-cli -g

使用步骤如下:

# 1. 初始化项目
multi-spa-webpack-cli init spa-project

<center>

React脚手架搭建

</center>

# 2. 进入文件目录
cd spa-project

# 3. 安装依赖
npm install

# 4. 打包不变的部分
npm run build:dll

# 5. 启动项目(手动打开浏览器:localhost:8090)
npm start

# 6. 启动服务(可选)
cd server
npm install
npm start

预览:

<center>

React脚手架搭建

</center>

封装 fetch

现在处理异步的方式,大多数基于 Promise 的。而 fetch 是天然支持 Promise 的,所以无需再手动封装。在 PWA 技术中,已作为一个重要的组成部分在使用。

fetch 为人诟病的缺点之一,就是不能 Abort 请求。有方案提出提出,通过 Promise.race 的方法来模拟 timeout。实际上该执行的已然执行,只是表象上达到了预期的效果。不过浏览器现以实验性开始支持 AbortController 。

import { notification } from 'antd';

const env = process.env.NODE_ENV;
const baseURL = APP_CONFIG[env].ip;
// timeout ;
// const controller = new AbortController();
// const signal = controller.signal;
const defaultConfig = {
  credentials: 'include',
  headers: {
    Accept: 'application/json'
  },
  // signal
};
const codeMessage = {
  301: '永久移动',
  302: '临时移动',
// ...
  504: '网关超时。'
};

const checkStatus = response => {
  if (response.status >= 200 && response.status < 300) {
    return response;
  }
  const errortext = codeMessage[response.status] || response.statusText;
  notification.error({
    message: `请求错误 ${response.status}: ${response.url}`,
    description: errortext
  });
};

export default async function Fetch(url, config) {
  let newUrl = baseURL + url;
  let newConfig = {
    ...defaultConfig,
    ...config
  };
  // const timeoutId = setTimeout(() => controller.abort(), 5000);
  if (
    newConfig.method.toLocaleLowerCase() === 'post' ||
    newConfig.method.toLocaleLowerCase() === 'put' ||
    newConfig.method.toLocaleLowerCase() === 'delete'
  ) {
    if (!(newConfig.body instanceof FormData)) {
      newConfig.headers['Content-Type'] = 'application/json; charset=utf-8';
      newConfig.body = JSON.stringify(newConfig.body);
    }
  }
  try {
    const response = await fetch(newUrl, newConfig);
    // clearTimeout(timeoutId);
    return checkStatus(response).json();
  } catch (error) {
    notification.error({
      message: `请求错误 : ${newUrl}`,
      description: error.message
    });
    throw error;
  }
}

集成react-router-dom路由管理

自 raect-router v4 之后,便不再支持集中式管理路由,不过也可以自己手动去实现。React + antd 模板采用的是官网推荐的方式,layouts 目录下的文件用来管理路由。

<center>

React脚手架搭建

</center>

集成react-redux状态管理

Redux 作为状态管理工具,除了 React,也可以用在其他地方(意思是说,和 React 没半毛钱关系)。在React中使用时,我们需要借助 React-redux 工具,这样使用起来更加方便。

严格的单向数据流是 Redux 架构的设计核心。

redux 数据流向:

就是把 action(行为) dispatch(丢给)reducer(更新 state)。

<center>

React脚手架搭建

</center>

node服务集成(可选)

node 服务登陆采用的是 session 来记录状态。

<center>

React脚手架搭建

</center>

就这样,一个简单的脚手架宣告完成。

不过,这才只是个开始。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Host Your Web Site In The Cloud

Host Your Web Site In The Cloud

Jeff Barr / SitePoint / 2010-9-28 / USD 39.95

Host Your Web Site On The Cloud is the OFFICIAL step-by-step guide to this revolutionary approach to hosting and managing your websites and applications, authored by Amazon's very own Jeffrey Barr. "H......一起来看看 《Host Your Web Site In The Cloud》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试