antd 进行ajax请求,react+dva+antd接口调用方式

一丶 安装

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

$ npm install dva-cli -g

$ dva -v

0.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配置

五丶创建接口文件products.js

在services文件下创建products.js, .yield call方法里面的usersService.fetch方法如下(PAGESIZE目前是常量) products.js代码如下:

import request from 'requesturl';

// 新闻轮播图显示

export function NewsCarousel(start, limit ){

const body = JSON.stringify({ start: 0, limit: 1000 });

return request("menu/query", {

method: "POST", body,

headers: {'Content-Type': 'application/json'}

});

}

//新闻列表

export function NewsList(start, limit, type){

const body = JSON.stringify({ start, limit, type});

return request("new/query", {

method: "POST", body,

headers: {'Content-Type': 'application/json'}

});

}

然后在models中创建对应的products.js, 因为services下的products.js 和models下的products.js 两者是react 调入接口和接收接口参数 密不可分的文件。

import * as services from '../services/products';

export default {

namespace: 'products',

state: {

newinfo: [],

newdetail: []

},

reducers: {

update(state, action) {

return { ...state, ...action.payload };

},

},

effects: {

* NewsInfo({ payload},{ call, put }){

const list = yield call(services.NewsCarousel);

let menu= [], arr = list.data.data;

arr.forEach(items => {menu.push({ title: items.Text, id: items.Id }) });

yield put({ type: "update", payload: { newinfo: menu }});

},

* NewsDetail({ payload:{start, limit, type}}, { call, put }){

const detail = yield call(services.NewsList, start, limit, type);

yield put({ type: "update", payload: { newdetail: detail.data.data}});

}

},

subscriptions: {

setup({ dispatch, history }) {

return history.listen(({ pathname, query }) => {

if(pathname === "/"){

dispatch({ type: 'NewsInfo'});

dispatch({ type: 'NewsDetail', payload:{

start: 0,

limit: 1000,

type: "7ad2c8db-ff04-4736-81c9-1b7c6fb276b3"

}});

}

})

},

},

};

六丶在components文件下ListPage文件夹下

NewsCarousel.js

import React from 'react';

import { connect } from 'dva';

import styles from './styles.less';

import { Carousel } from 'antd-mobile';

const NewsCarousel = ({ dispatch, newdetail, ...rest }) =>{

return(

autoplay={false}

infinite

selectedIndex={0}

swipeSpeed={35}>

{newdetail && newdetail.length!== 0?

newdetail.map(val =>(

key={val.Id}

href={val.Link}

className={styles.banner}>

style={{

width: '100%',

height: '180px'

}}

src={val.Img}

alt=""/>

{val.Title}

)): ""}

)

}

export default connect(({ products }) => ({ ...products }))(NewsCarousel);

NewsCrad.js

import React from 'react';

import { connect } from 'dva';

import styles from './styles.less';

import { Tabs, WhiteSpace, Card, WingBlank } from 'antd-mobile';

const DTabBar = Tabs.DefaultTabBar;

const NewsCrad = ({ dispatch, newinfo, newdetail, ...rest }) =>{

const changeKey = (key) =>{

dispatch({

type: 'products/NewsDetail',

payload:{ type: key.id, start: 0, limit: 1000 }

})

}

const renderContent = (tab, i) => {

return(

{newdetail && newdetail.length!== 0?

newdetail.map((val, i) =>

{val.Title}

{val.Memo}

): ""}

)

}

return(

tabs={newinfo}

onChange={changeKey}

renderTabBar={props => }>

{renderContent}

)

}

export default connect(({ products }) => ({ ...products }))(NewsCrad);

七丶在 routes文件下 ListView.js进行数据渲染

import React from 'react';

import { NewsCarousel, NewsCrad } from 'components';

export default function ListView(){

return (

);

}

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

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

相关文章

基于MaxCompute的拉链表设计

摘要: 简单的拉链表设计 背景信息: 在数据仓库的数据模型设计过程中,经常会遇到这样的需求: 数据量比较大; 表中的部分字段会被update,如用户的地址,产品的描述信息,订单的状态、手机号码等等; 需要查看…

2019全球编程语言高薪排行榜登场;余承东正式宣布华为IFA2019 或发布麒麟990;OPPO、vivo和小米成立互传联盟…...

关注并标星星CSDN云计算极客头条:速递、最新、绝对有料。这里有企业新动、这里有业界要闻,打起十二分精神,紧跟fashion你可以的!每周三次,打卡即read更快、更全了解泛云圈精彩newsgo go go 全新的索尼PS5(图…

python文件输出log_Python同时向控制台和文件输出日志logging的方法

#-*- coding:utf-8 -*- import logging # 配置日志信息 logging.basicConfig(levellogging.DEBUG, format%(asctime)s %(name)-12s %(levelname)-8s %(message)s, datefmt%m-%d %H:%M, filenamemyapp.log, filemodew) # 定义一个Handler打印INFO及以上级别的日志到sys.stderr c…

MaxCompute使用常见问题总结

摘要: Maxcompute常见问题的总结,方便广大用户可以快速排查问题 计费相关 存储计费:按照存储在 MaxCompute 的数据的容量大小进行阶梯计费。 计算计费:MaxCompute 分按量后付费和按 CU 预付费两种计算计费方式。 按量后付费&#…

工作流实战_02_flowable 流程模板导入

由于群里有些朋友对这个flowable还不是很熟悉,在群里的小伙伴的建议下,师傅(小学生05101)制作一个开源的项目源码,一共大家学习和交流,希望对有帮助,少走弯路 如果有不懂的问题可以入群:633168411 里面都是…

华为服务器raid1装系统,服务器raid1系统安装

服务器raid1系统安装 内容精选换一换需要创建两台ECS,一台使用Linux系统安装SAP应用与DB2,另外一台用于安装SAP GUI和作为跳板机,两台ECS详情如下所示,下表均为示例,请根据实际情况购买Avago 3408iMR RAID卡不支持虚拟…

关于大数据你应该了解的五件事儿

摘要: 本文从基本概念、行业趋势、学习途径等几个方面介绍了大数据的相关内容,适合对大数据感兴趣的读者作为入门材料阅读。随着科技的发展,目前已经步入了大数据的时代,很多社交媒体和互联网公司也非常关注大数据这一行业。那么对…

当我们谈AI时,到底该谈什么?

报名倒计时仅剩1天,即刻扫描下方二维码,或者点击【阅读原文】免费报名,让我们不见不散。

前端电子表数字字体_爬虫:如何优雅应对字体反爬

目录THE BEGIN一 什么是字体反爬二 如何解密1.人工解密2.工具解密三 建立映射关系四 解密THE BEGIN网页数据爬取可以简单分为三步:抓取页面,分析页面,存储数据。其中第一二步最为头疼,因为每个站点各有特色,你要不断检…

ECS云资源可视化--资源概览

摘要: 随着越来越多的业务接入云计算,云上拥有的各类资源也越来越多,用户如何时时对其拥有的各类资源进行统计分析成为一个难题。ECS控制台针对这一问题,推出资源概览功能,目前支持实例和存储两种云资源的统计和分析功…

工作流实战_03_flowable 流程模板部署

由于群里有些朋友对这个flowable还不是 很熟悉,在群里的小伙伴的建议下,师傅(小学生05101)制作一个开源的项目源码,一共大家学习和交流,希望对有帮助,少走弯路 如果有不懂的问题可以入群:633168411 里面都是…

为物联网而生:高性能时间序列数据库HiTSDB商业化首发!

摘要: 近日,阿里云宣布高性能时间序列数据库 (High-Performance Time Series Database , 简称 HiTSDB) 正式商业化。 近日,阿里云宣布高性能时间序列数据库 (High-Performance Time Series Database , 简称 HiTSDB) 正式商业化。 先跟大家聊一…

kafka系统设计开篇

戳蓝字“CSDN云计算”关注我们哦!来源 | 靳刚同学MQ(消息队列)是跨进程通信的方式之一,可理解为异步rpc,上游系统对调用结果的态度往往是重要不紧急。使用消息队列有以下好处:业务解耦、流量削峰、灵活扩展…

工作流实战_04_flowable 流程的模板的图片和xml显示

由于群里有些朋友对这个flowable还不是 很熟悉,在群里的小伙伴的建议下,师傅(小学生05101)制作一个开源的项目源码,一共大家学习和交流,希望对有帮助,少走弯路 如果有不懂的问题可以入群:633168411 里面都是…

成功使用机器学习技术的3个技巧

摘要: 本文讲述了3个针对机器学习的小技巧,相信对正在学习机器学习的朋友有所帮助机器学习、自然语言处理(NLP)和认知搜索技术正以高速率被采用,这并不稀奇。随着组织努力创造价值,增强客户体验,遵守严格的规定并使自己…

Spring精华问答 | 如何集成Spring Boot?

Spring框架是一个开源的Java平台,它提供了非常容易,非常迅速地开发健壮的Java应用程序的全面的基础设施支持。今天就让我们一起来看看关于Spring的精华问答吧。1Q:如何在自定义端口上运行Spring Boot应用程序?A:为了在自定义端口上运行Spring…

Andrew Ng深度学习课程笔记

摘要: 本文对Andrew Ng深度学习课程进行了大体的介绍与总结,共包括21个课程。我最近在Coursera上完成了Andrew Ng导师关于新深度学习的所有课程。Ng在解释术语和概念方面做得非常出色。例如,Ng指出,监督深度学习只不过是一种多维曲…

工作流实战_05_flowable 流程定义的挂起与激活

由于群里有些朋友对这个flowable还不是 很熟悉,在群里的小伙伴的建议下,师傅(小学生05101)制作一个开源的项目源码,一共大家学习和交流,希望对有帮助,少走弯路 如果有不懂的问题可以入群:633168411 里面都是…

技嘉注入usb 3.0工具_技嘉怎么安装win10系统 技嘉安装win10系统步骤【图文介绍】...

技嘉笔记本性能配置高端,质量一流,技嘉科技在主板方面也及其出色,因此自身生产的电脑配置也相当专业。若要用技嘉 安装win10系统 要怎么做比较快呢?最简单的方法便是用u盘装系统了,u盘装系统可谓是傻瓜式一键装机,让装…

为什么深度学习没有取代传统的计算机视觉?

摘要: 深度学习大潮为什么淹没传统的计算机视觉技术?听听大牛怎么说~这篇文章是受到论坛中经常出现的问题所创作的:深度学习是否可以取代传统的计算机视觉?这明显是一个很好的问题,深度学习(DL)…