antd 怎么用ajax,react+dva+antd接口调用方式

一丶 安装

通过 npm 安装 dva-cli 并确保版本是0.8.1或以上。$ npm install dva-cli -g

$ dva -v0.8.1

二丶创建新应用

安装完dva-cli之后,就可以在命令行里访问到dva命令(不能访问?)。现在,你可以通过dva new创建新应用。$ dva new dva-quickstart

$ npm start

之后浏览器就会打开 http://localhost:8000,你会看到dva的欢迎界面。

三丶使用antd组件库

通过 npm 安装 antd 和 babel-plugin-import。babel-plugin-import 是用来按需加载 antd 的脚本和样式的$  npm  install antd babel-plugin-import --save

编辑.roadhogrc,使  babel-plugin-import  插件生效。"extraBabelPlugins": [

-    "transform-runtime"+    "transform-runtime",

+    ["import", { "libraryName": "antd", "style": "css" }]

],

注:dva-cli 基于 roadhog 实现 build 和 server,更多.roadhogrc的配置详见  roadhog#配置

四丶准备工作以及文件之间的对应关系

首先在创建文件之前(一般安装的时候系统会自动生成一个默认的services文件下 Example.js 和 model文件下 example.js,两者都是一一对应)

react项目的推荐目录结构(如果使用dva脚手架创建,则自动生成如下)|── /mock/             # 数据mock的接口文件

|── /src/              # 项目源码目录(我们开发的主要工作区域)   |   |── /components/   # 项目组件(用于路由组件内引用的可复用组件)   |   |── /routes/       # 路由组件(页面维度) |   |  |── route1.js

|   |  |── route2.js   # 根据router.js中的映射,在不同的url下,挂载不同的路由组件|   |  └── route3.js

|   |── /models/       # 数据模型(可以理解为store,用于存储数据与方法)  |   |  |── model1.js

|   |  |── model2.js   # 选择分离为多个model模型,是根据业务实体进行划分|   |  └── model3.js

|   |── /services/     # 数据接口(处理前台页面的ajax请求,转发到后台)   |   |── /utils/        # 工具函数(工具库,存储通用函数与配置参数)     |   |── router.js       # 路由配置(定义路由与对应的路由组件)  |   |── index.js       # 入口文件  |   |── index.less

|   └── index.html

|── package.json       # 项目信息  └── proxy.config.js    # 数据mock配置

五丶创建接口文件New.js在services文件下创建New.js, .yield call方法里面的usersService.fetch方法如下(PAGESIZE目前是常量)    New.js代码如下:import request from '../utils/request';

// data: [{Id, Text, CreateTime, UpdateTime, IsActive }]export function queryScaleMenu(start, limit) {    let body = {

start,

limit

}

body = JSON.stringify(body);    return request('http://192.168.10.45/GYHL.News/api/news/menu/query', {

method: 'POST',        headers: {          'Content-Type': 'application/json',

},        body: body

});

}

export function queryScaleNews(start, limit, type) {    let body = {

start,

limit,

type

}

body = JSON.stringify(body);    return request('http://192.168.10.45/GYHL.News/api/news/new/query', {

method: 'POST',        headers: {            'Content-Type': 'application/json',

},        body: body

});

}然后在models中创建对应的New.js, 因为services下的New.js 和models下的New.js 两者是react 调入接口和接收接口参数 密不可分的文件。import * as services from './../services/News';export default {    namespace: 'News',    state: {        detail:[],        data: [],

},    subscriptions: {

steup({dispatch, history}) {            return history.listen((location) => {                // console.log(location);

let start = 0;                let limit = 1000;                let type = "7ad2c8db-ff04-4736-81c9-1b7c6fb276b3";

dispatch({type: "fetchMenu",payload:{start,limit}});

dispatch({type: "fetchNews",payload:{start,limit,type}});

})

}

},    effects: {

* fetchMenu({ payload: { start, limit, ...rest } },{ call, put }){            var nextMenu = yield call(services.queryScaleMenu, start, limit );

// console.log(nextMenu);

var startNews = nextMenu.data.data;            yield put({ type: "save", payload: { detail:startNews}});

},

* fetchNews({ payload: { start, limit, type, ...rest }}, { call, put }){            var nextNews = yield call(services.queryScaleNews, start, limit, type);            // console.log(nextNews);

var lastNews  = nextNews.data.data;            yield put({ type: "save", payload: { data:lastNews }});

}

},    reducers: {

save(state, action){            return { ...state, ...action.payload}

}

},

};

六丶把components文件下Example.js组件修改一下import React from 'react';import styles from './style.css';import { connect } from 'dva';function Example({ dispatch, data}) {    // console.log(data);

let detail = [];    if (data.length != 0) {

detail = data;

}  return (     

{

detail.length != 0?

detail.map(item =>(              

                    

{item.Memo}

{item.Title}

)):""}        

);

};

Example.propTypes = {

};

export default connect(({News}) => ({...News}))(Example);

七丶在 routes文件下 IndexPage.js进行数据渲染import React from 'react';import Example from '../components/Example';import { connect } from 'dva';import styles from './IndexPage.css';import Button from 'antd/lib/button';import 'antd/lib/button/style';import Carousel from 'antd/lib/carousel';import 'antd/lib/carousel/style';import Tabs from 'antd/lib/tabs';import 'antd/lib/tabs/style';const TabPane = Tabs.TabPane;function IndexPage({ dispatch, detail, data}) {    let T1,T2,T3,T4, I1,I2,I3,I4 = "";     if (detail.length != 0) {

T1 = detail[0].Text;

T2 = detail[1].Text;

T3 = detail[2].Text;

T4 = detail[3].Text;

I1 = detail[0].Id;

I2 = detail[1].Id;

I3 = detail[2].Id;

I4 = detail[3].Id;

};// 建议小伙伴不要这样去渲染,最好是把它写成循环的方式去写,因为我的方法是最笨订的方法(数据多了还是循环实用些)

function callback(key){        // console.log("--------------s")

// console.log(key);

let type = key;

let start = 0;        let limit = 1000;

dispatch({type: "News/fetchNews",payload:{start,limit,type}});

};    return (      

222
333
444
555

);

};

IndexPage.propTypes = {

};export default connect(({News}) => ({...News}))(IndexPage);

总结:

整体看看我的方法和数据渲染方式不是太好,毕竟是目前还在学习状态,所以react学习开发之路还很漫长,所以我觉得在这个前端发展迅速的年代中要不停地去汲取精华,去取糟粕。扩充自己前端主流框架的学习及运用。祝愿前端的小伙伴们在未来有个好的发展方向,

作者:sidney_c

链接:https://www.jianshu.com/p/55702d52593b

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/527484.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python外星人入侵怎么发给别人_python_外星人入侵(1-1)

sys:system的简称。包含了一些与系统有关的函数。 step1:构建游戏的主框架 import sys import pygame def run_game(): 初始化游戏并创建一个屏幕对象 pygame.init() # 创建一个显示窗口,宽1200像素,高800像素 screen pygame.dis…

gta5怎么设置画质最好_GTA5画面如何设置最好_GTA5画质设置成最高配置推荐-win7之家...

GTA5是侠盗猎车手的简称,这款游戏是很多玩家都很热爱的一款网络游戏,在游戏过程中,我们可以通过画面设置来提高游戏的画面效果,不过还要顾及游戏的流畅性,那么GTA5画面如何设置最好呢?针对这个问题&#xf…

js ajax递归调用,js的promise如何递归调用?

好问题,正中Promise机制的核心之一:then方法返回另一个promise2,其内容是由回调方法的返回值决定的;回调中可以返回promise3,使外面的promise2的内容成为promise3的内容也就是说,如果要用promise来递归&…

python用outlook自动发邮件_python使用两种发邮件的方式smtp和outlook示例

smtp是直接调用163邮箱的smtp服务器,需要在163邮箱中设置一下。outlook发送就是Python直接调用win32方式。调用程序outlook直接发送邮件。 import win32com.client as win32 import xlrd outlook win32.Dispatch(outlook.application) mail outlook.CreateItem(0)…

cpu java poi 导出_Java里当POI导出Excel数据比较大时的优化方案

问题在Java里绝大多数都是使用POI进行导入导出Excel,正常情况下也都没有问题。但当导出的数据量比较大时,我留意到我本机当数据量达到两三万条(二十个列)时,就会出现内存溢出,CPU飙升到95%以上的情况。可能换到好点的服务器上会好…

服务器在行例维护中,8月14日服务器例行维护公告

原标题:8月14日服务器例行维护公告亲爱的玩家:青龙乱舞区、大地飞鹰区、天命风流区、沧海云帆区全部服务器将在8月14日6:00~10:00停机维护更新,维护完成后上述各服务器客户端版本更新至2.0.94.6。本次维护主要调整和修改内容如下,…

dedecms联动筛选_DEDECMS分类信息按联动类别筛选的实现方法

注意:本教程只在DedeCMS V5.6上测试过,v5.7sp1的话一般也会通用,请自行测试!实现方法:1. 修改include\taglib\infolink.lib.php,找到:require_once(DEDEROOT./data/enums/infotype.php);在其下面…

暗黑2战网服务器爆率修改,暗黑2修改MOD最初级基础

第一步:得到修改所用的工具修改MOD首要的是工具,这里推荐几款常用工具:MPQ文件打开及导入工具:MPQWorkshop 备用:mpqview CV5.x (初级入门推荐mpqworkshop,必需)MPQWorkshop是目前最好的工具,主…

delphi listview 添加数据 慢_Delphi 二十四岁, Delphi 10.3.1 发布

Delphi1 是 Borland于1995年2月14日发布,因此2019年2月14日是该产品发布的24周年纪念日。如果你想了解一些关于该产品及其发布的历史,你可以参考文章“22 Years of Delphi and it Still Rocks”。在那篇文章中,我收集了一些早期产品的照片&am…

找规律万能公式_有一个万能公式,可以帮你解决任何烦恼!

有一个万能公式,可以帮你解决任何烦恼。我是在十几年前学到的,一直使用到现在。不仅简单,而且非常有效,只有3步,马上就能现学现用。如果你目前正好碰到了什么难题,不妨试试这个万能公式。01第一步&#xff…

python 目录下的文件_用python把文件夹下的所有文件包括文件夹里面的文件都拷贝到同一个目录下...

比如1文件夹下有2文件夹,2文件夹下有1.txt文件和3文件夹,3文件夹下有2.txt3.txt现在要把1.txt2.txt3.txt全都拷贝到1文件夹下importosimportshutildefchange(path,path1):i1#printi... 比如1文件夹下有2文件夹,2文件夹下有1.txt文件和3文件夹…

vue 判断两对象是否一致_你的.vue文件就已经是你的文档了

更新:文档地址:http://vuese.org昨天发布了vuese1.0,这是我的一个新的开源项目,用来解析Vue SFC并生成markdown文档,如下:HcySunYang/vuese​github.com这篇文章不会介绍如何使用,至于如何使用大…

centos7 oracle_Centos7主机名变成bogon的原因及解决方法

问题描述虚拟机在设置完静态IP后,莫名其妙地主机名就变成了bogon,并且问题会稳定复现,就是说每次重启都会。如下图所示:看着不顺眼不说,听说可能还会影响某些服务,如可能导致oracle安装过程网络配置出错等问…

get 参数太长怎么办_新买的手表表带太长了该怎么办?表带调节操作方法get你~...

表表哥点击☝上方蓝字关注我们表带是手表的重要组成部分,同时表带决定着手表佩带的舒适性,方便性,对手表的安全也有关系。现在表带的材质也很多,最常见的就是不锈钢的和真皮的。买过手表的人应该都知道,只有是专门定制…

python pandas合并多个excel_python pandas合并多个excel(xls和xlsx)文件(弹窗选择文件夹和保存文件)...

# python pandas合并多个excel(xls和xlsx)文件(弹窗选择文件夹和保存文件) import tkinter as tk from tkinter import filedialog import os import pandas as pd import glob root tk.Tk() root.withdraw() # 选择文件夹位置 filelocation os.path.n…

elasticsearch初次查询超时_ElasticSearch的工作流程

1.ElasticSearch的工作流程​ 1.启动过程​ 当ElasticSearch节点启动时,使用发现(discovery)模块来发现集群中的其他节点(配置文件的集群名称)并连接.ElasticSearch会发送广播,以找到相同集群名称其他节点。​ 集群选举一个节点为主节点。该节点负责分发…

modbus slave如何使用_【干货】如何进行PLC远程监控?只需三个步骤,马上帮你解决问题!...

工厂里的工程师小威最近真的很头痛,公司客户的一台或多台设备分布在不同的地区或国外,如果要对其PLC、HMI等自控产品进行远程控制、调试和维护。除了问题,经常要千里迢迢奔赴国外进行维护。最近有事特殊时期,国外疫情比较乱套&…

智能卡门禁管理系统_出入口门禁控制系统与消防火灾报警系统怎么联动?

门禁系统作为一个控制进出的设备,在发生火灾时如何快速打开所有防火逃生门时,是需要弱电单位对门禁系统要行动考虑,否则容易出现隐患,万一出现火灾,因为门禁是常闭门造成人员无法快速逃生那是肯定要负一定的责任的。如…

两表格合并_六个高效办公Excel小技巧,让你提前下班两小时!

每天下午一点,PPT技能进步一点大家中午好呀!大家好这是我们的抖音号PPT模板抖音搜索“PPT1080”就可以啦更多福利等你来拿!小编发现抖音里无奇不有有关于Excel的小知识点也很多今天就带大家盘点一下抖音里最火爆的6个Excel小技巧点滴积累可以…

mybatis获取表名_mybatis plus 的动态表名的配置详解

mybatis plus简介详见mybatis plus的官网业务要求业务上要求存储数据的时候根据某个字段动态的选择数据要存储的表.如根据code字段: code->[1001,1002]来进行选择存储的表:经过下面的配置实现动态表名如 --> table1_1001,table_1002的效果.以此动态生成表名的效果.具体实…