React +Redux+ Ant Design + echarts 项目实践

项目框架

采用React.js作为项目的框架

采用redux作为数据管理的框架

采用antd作为项目的UI组件

采用echarts完成项目中折线图的绘制

个人项目工作流程总结

拿到UI高保真图片之后先对整个页面进行模块化分,大的模块分为上部的折现图部分,中间部分的网元的拓扑图部分,下部分表格部分以及表格点击后的弹出层部分。每个模块有可以再次细分为模块的头部(头部数据基本不变化),以及模块的内容展示部分。

基本就这样把整个页面细分成不同的组件模块,子组件又可以组成父组件,大的父组件完整组合成整个页面。

  1. 起初做的时候并没有采用redux来控制数据的传输,因为当时自己以前并没有用过(当时听说很复杂),并且通过react提供的数据传递的方式也用不到redux,并且开始做的时候组件之间数据传递都还比较简单。直接采用Ajax请求通过在当前页面请求到数据,在通过this.props来来传递数据,通过this.state来控制组件内数据的变化,通过回调函数来完成数据从子组件传递到父组件。后面在项目进展过程中项目组中的其他前端都采用了redux来实现数据的传递,然后就开始改在自己的代码。天知道在一个基本昨晚的页面中采用一个自己从来没有过的技术并且要摒弃前面写的代码的思维惯性会有多困难。于是当时就陷入了无尽的痛苦之中。不性的是关于redux的教学视频网上也没找到。看了很多博客文章也是云里雾里。实在没办法了,通过看项目组成员写的其他页面的,改造自己的页面。终于把redux的数据跑通了。(过程纯属自我吐槽)
  2. echarts相对来说就比较容易接受了(虽然以前也没用过),首先其是百度的开源产品,有中文的官网和完整的API配置文档。并且其针对不同的图形配置不同的option也来得简单粗暴。所以很快也就能够用来做项目中的折线图。
  3. antdUI组件是以前用来作过一个小的项目的东西,也算比较熟悉。以前用的是1.X的版本,进行这个项目的时候已经进入了2.X的版本,并且在持续的更新。功能也越来越强大。

项目流程介绍

由于这个项目是一个运营商后台数据可视化平台,所以整体页面风格也是简单实用型。首先在antd中找到每一个页面中需要的组件,复制出代码,呈现在页面上,然后再根据高保真的组件尺寸进行样式改造。在react的每一个生命周期中完成相应的事件处理。

本次总结的重点:使用redux完成的那个组件之间的数据通讯

  1. 首先引入react-redux:

    import {Provider} from "react-redux";
  2. 引入configureStore组件,里边存储着所有action中的状态:

    import configureStore from "./store/configureStore.js";
    
    const store=configureStore();
  3. 用redux中解析出来的Provider包裹住主组件:
ReactDOM.render(
    <Provider store={store}><RootApp/></Provider>,
    document.getElementById("root")
)

redux主要由三个部分组成,这个在很多的介绍redux的博客中都会讲到,这里我也想复习一下,先按照自己的理解写下来:这三部分分别是store(储备),顾名思义就是用来存储数据的仓库,在用redux进行数据传递的时候,需要传递的数据都会存储在store中。第二部分是reducers(还原剂,减速剂),在这部分中对数据进行一些操作,然后然后把数据再返回store中,然后通过store中的数据变化来更新组件。第三部分就是action,用来接收组件中事件,生成操作数据的方法。把action中的方法和store中的数据一起传入reducer中进行处理。

(由于自己理解的不是很透彻,现将一些知名博客中的解释进行引用)

首先,用户发出 Action。
store.dispatch(action);
然后,Store 自动调用 Reducer,并且传入两个参数:当前 State 和收到的 Action。 Reducer 会返回新的 State 。
let nextState = todoApp(previousState, action);
State 一旦有变化,Store 就会调用监听函数。

// 设置监听函数
store.subscribe(listener);

listener可以通过store.getState()得到当前状态。如果使用的是 React,这时可以触发重新渲染 View。

function listerner() {
  let newState = store.getState();
  component.setState(newState);
}

具体介绍Redux中的每一块的写法

//configureStore

/**
 * 接收reducer里的state,存储所有state
 */
import {
    createStore, applyMiddleware,
    combineReducers, compose
} from "redux";
import thunkMiddleware from ‘redux-thunk‘;
import createLogger from ‘redux-logger‘;
import {
    /**
     * 从reducer中引入的处理后保存store数据的方法
     */
    } from "../reducers/reducer.js";
/**
 * @description:将多个拆分的reducer(一个reducer管理一个状态)合并成一个新的reducer传入store。
 */
const newReducer = combineReducers({
    /**
     * 从reducer中引入的处理后保存store数据的方法
     */
});
const logger = createLogger();
const initialState = {};
export default function configureStore() {
    let store;
    if (module.hot) {
        store = createStore(newReducer, initialState, compose(
            applyMiddleware(thunkMiddleware, logger),
            window.devToolsExtension ? window.devToolsExtension() : f => f
        ));
    } else {
        store = createStore(newReducer, initialState, compose(
            applyMiddleware(thunkMiddleware), f => f
        ));
    }
    return store;
}

//reducers

/**
 *  Reducer
 */

import {
    /**
     * 引入action中的状态常量
     */
    GET_SUCCESS
} from "../actions/action.js";

/**
 * @func:(getValueDate)获取数据值;
 */

export function getValueDate(state={},action){
    switch (action.type){
        case GET_SUCCESS:
            return {
                data:Object.assign({},state,updateState(state,action)).data
            }
        default:
            return state
    }
}

//actions

/**
 * action
 */

import Apis from "../utils/api.js";//Apis为数据请求的后台接口地址
import { callApi } from ‘../../utils/utils.js‘;//callApi为封装的利用Ferch请求方法
import {
    GET_VALUE,
    GET_SUCCESS,
    GET_FAILURE
} from "./action.js";

function getValueRequest(type) {
    return{
        type:type
    }
}

function getValueRequestSuccess(type){
    return function(data){
        return{
            type:type,
            data:data
        }
    }
}
function getValueRequestFailure(type){
    return function(data){
        return{
            type:type
        }
    }
}

/***
 * @func:提交请求的函数;
 */
export function getSelectValue(parm){
    let url=Apis.GET_SELECT_VALUE_URL;
    return callApi(
        url,
        parm,
        getValueRequest(GET_VALUE),
        getValueRequestSuccess(GET_SUCCESS),
        getValueRequestFailure(GET_FAILURE)
    );
}

//部分内容未完成,后续补充。

时间: 2024-08-12 12:32:30

React +Redux+ Ant Design + echarts 项目实践的相关文章

【react自制全家桶】一、Webstrom+React+Ant Design+echarts搭建react项目

前言 一.React是Facebook推出的一个前端框架,之前被用于著名的社交媒体Instagram中,后来由于取得了不错的反响,于是Facebook决定将其开源.出身名门的React也不负众望,成功成为当前最火热的三大前端框架之一.相比于Angular,React更加轻量.而相对于另一个轻量级前端框架Vue来说,React虽然学习和使用起来难度稍微大一些,但是React的社区相对来说人气更旺,而且在移动端的开发上面,大名鼎鼎的React Native更是尽显优势,在代码性能上要好过Vue框架.

react + es6 +ant design 实现一个简单demo表格添加删除

首先介绍一下整体的样式及实现的效果 如图所示,点击添加按钮会接着后面新增一行,点击操作下的删除图标将会删掉一行,如果删掉序号为1的行,第二行会自动变成第一行序号也会随之改变. ps:数据交互均还未实现. 介绍完毕:下面正题! 1.布局 import React, { Component, PropTypes } from 'react';import { Table, DatePicker, Select, InputNumber, Input, Button, Icon } from 'ant

Ant Design Vue项目解析-前言

源码系列文章很长时间没有更新,一是在考虑文章用什么方式写质量会更高,用什么方式总结更易于扩展和总结知识点,加上工作.看书.健身占用的时间比较多所以也没时间去整理.最近在网上看到一篇文章感觉这种方式不错,刚好ant Desgin of vue发布,就想试试用这种方式写文章,而且通过画思维导图来整理整个知识点: 还没有整理完,里面经常会有打问号的解释是因为要看到后面才能知道这个组件的用途.后续会将其补充完整.还想记录下我在不熟悉源码结构下怎么牵出一个线头顺藤摸瓜的属性整个项目. 把ant Desgi

使用React+Umi+Ant Design Pro实现生产环境动态切换主题,支持暗黑主题

投入前端开发也有1年的时间了,我还是很菜.在开发中还是很多技巧以及经验不够,写文章也是文笔不行,不过好在写的内容意思大概都能看懂.这次就来介绍一下我在开发过程中遇到的一些问题以及处理技巧. 两月前刚开始试用umi这个React的框架,使用AntD Pro创建好项目后,着实熟悉了几天,不过熟悉这个框架后,就觉得阿里的大佬还是牛.佩服. 事情是这样的,我们能够在AndD Pro的在线预览上看到能够动态切换主题.而实际拉下来的模板中却没有这个功能.我就开始了对比源码. 算了,先上一下项目目录结构吧,不

React之ant design的table表格序号连续自增

render(text,record,index){ return( <span>{(pagination.current-1)*10+index+1}</span> ) } 原文地址:https://www.cnblogs.com/lj8023/p/9942110.html

react 与 Ant Design 相互兼容问题,react 引入Ant Design 报错问题

antd 在 3.0 之后兼容 [email protected] 2.x 的版本请使用 [email protected] 原文地址:https://www.cnblogs.com/xsdds/p/11696966.html

如何创建Pull Request,以开源项目ant design pro为例

声明:本文章也是我本人参考网络上的一些教程写的,毕竟我也是第一次为开源项目做贡献,心里难免有点小激动.所以用此文章来记录这个过程,和一些操作方式.同时留作以后可供参考. 背景:最近做了公司一个项目,具体项目我也就不说了,反正用了React+Umi+Ant Design Pro.具体情况是这样,使用官方的SettingDrawer实现了在线切换主题的功能,但是官方的控件中会有如下拷贝设置按钮一直显示. 然而我想要的效果如右图 可是我的项目上线后,不需要复制主题配置进行分享,仅开发过程中设置默认主题

使用Facebook的create-react-app脚手架快速构建React开发环境(ant.design,redux......)

 create-react-app是来自于Facebook出品的零配置命令行工具,能够帮你自动创建基于Webpack+ES6的最简易的React项目模板 1:首先在webstorm中新建一个项目 2:倘若不是最新版本的npm   ,   安装最新版本npm     npm install npm @latest 3: 安装项目中常用的相关的配置 yarn add react-redux redux redux-thunk react-router-dom thunk [email protect

Ant Design of React的安装和使用方法

在中台产品的研发过程中,会出现不同的设计规范和实现方式,但其中往往存在很多类似的页面和组件,给设计师和工程师带来很多困扰和重复建设,大大降低了产品的研发效率.我们(蚂蚁金服体验技术部)经过大量的项目实践和总结,沉淀出一个中台设计语言 Ant Design.旨在统一中台项目的前端 UI 设计,屏蔽不必要的设计差异和实现成本,解放设计和前端的研发资源. Ant Design 是一个致力于提升『用户』和『设计者』使用体验的中台设计语言.它模糊了产品经理.交互设计师.视觉设计师.前端工程师.开发工程师等