dva开发一个cnode网站(2)

news/2024/4/27 8:48:24/文章来源:https://blog.csdn.net/weixin_33737134/article/details/88704440
今天来学习第二节课程,完成列表数据的展示

效果:
首页列表

1. 新建ListData组件

import React , { Component }from 'react';
import { List, Avatar, Icon, Spin } from 'antd';
import PropTypes from 'prop-types';
import { connect } from 'dva';class ListData extends Component{render() {const IconText = ({ type, text }) => (<span><Icon type={type} style={{ marginRight: 8 }} />{text}</span>
);
console.log(this.props)return (<Spin spinning={this.props.loading.global} size='large'tip="数据正在加载中"><ListitemLayout="vertical"size="large"pagination={{onChange: (page) => {console.log(page);this.props.dispatch({ type: 'listdata/query', payload: { page:page,pageSize:this.props.pageSize,type:'all'} })},pageSize: this.props.pageSize,total:500}}dataSource={this.props.pageData}renderItem={item => (<List.Itemkey={item.title}actions={[<IconText type="star-o" text={item.visit_count} />, <IconText type="like-o" text={item.visit_count} />, <IconText type="message" text={item.reply_count} />]}><List.Item.Metaavatar={<Avatar src={item.author.avatar_url} />}title={<a>{item.author.loginname}</a>}description={item.create_at}/>{item.title}</List.Item>)}/></Spin>);}componentWillMount () {const { dispatch, type, pageSize,page} = this.propsdispatch({ type: 'listdata/query', payload: { page,pageSize,type} })}
};ListData.propTypes = {type: PropTypes.string.isRequired,pageSize: PropTypes.number.isRequired,
};function mapStateToProps(state) {const {pageSize,type,page,pageData} = state.listdata;return {pageSize,type,page,pageData,loading:state.loading};
}// export default ListData;
export default connect(mapStateToProps)(ListData);

用到了antd中的List, Avatar, Icon, Spin 四个ui组件。

  • List 列表
  • Avatar 头像
  • Icon 图标
  • Spin 数据加载
  • pagination 分页

componentWillMount 周期中获取列表数据,mapStateToProps 将model中的state数据和组件的props绑定,利用connect将两者连接。这样只要state中的数据发生变化,props就会发生变化,view视图就会重新渲染。

2. 创建组件的model listdata.js

import * as listService from '../services/list';
export default {namespace: 'listdata',state:{pageSize:20,page:1,pageData: [],type: 'all'},effects: {*query({ payload: { page,pageSize,type } }, { call, put }) {const result = yield call(listService.query, { page,pageSize,type })yield put({type: 'updateData',payload: {result,page,pageSize,type}})}},reducers: {'updateData'(state, { payload: data }) {let r = data.result.data.datalet {pageSize,page,type} = datareturn {...state,pageSize,page,pageData:r,type}}},subscriptions : {setup({ dispatch, history }) {
//       return history.listen(({ pathname, query }) => {
//         if (pathname === '/') {
//           dispatch({ type: 'query', payload: { page:1,pageSize:10,type:'all' } });
//         }
//       });}
},
}; 

注意申明了listdata的命名空间,在组件中绑定时要注明
命名

3. 创建组件的service list.js

这里面主要写获取数据的方法,就是请求api。有点像java里的dao层,route像java里的controller层

import request from '../utils/request';export function query({ page,pageSize,type }) {return request(`/api/v1/topics?page=${page}&limit=${pageSize}&tab=${type}`);
}

service会在model中的effects 中调用,effects中处理异步请求,之后action去reducers中更新state。

4. 开启代理

我们在本地访问cnode的api接口会有跨域,所以要进行代理。修改.webpackrc:

{"extraBabelPlugins": [["import", { "libraryName": "antd", "libraryDirectory": "es", "style": "css" }]],"proxy": {"/api": {"target": "https://cnodejs.org/","changeOrigin": true,"pathRewrite": { "^/api": "/api" }}}
}

cnode api说明:https://cnodejs.org/api

5. 在首页使用组件

import React from 'react';
import { connect } from 'dva';
import MyHeader from '../components/MyHeader';
import ListData from '../components/ListData';function IndexPage() {return (<div><MyHeader keys={['index']}/><div style={{paddingTop:20,paddingLeft:100,paddingRight:100,paddingBottom:50}}><ListData type='all' pageSize='10'/></div></div>);
}IndexPage.propTypes = {
};export default connect()(IndexPage);

好了现在你就可以看到效果了。
没解决的坑:
分页组件的使用,因为他是按总的数据记录以及每页数据量来自动分页的,而cnode的api是按页码和每页数据量来直接返回数据,所以没法知道total。因此我默认写了total=“500”.
欢迎关注我的公众号mike啥都想搞,学习更多内容。
mike啥都想搞

下期预告:

详情功能组件完成

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

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

相关文章

网站页面一键克隆,自动归类资源文件!PHPCUSTOM环境内置功能

百度搜“phpcustom”下载 强大软件动态界面效果 打开软件功能大全 点击前端工具 打开网页克隆 输入克隆的页面 选择位置直接克隆 点击这里可以设置克隆生成的资源目录名称 转载于:https://www.cnblogs.com/phpwamp/p/10982613.html

手把手教你搭建GitHub个人博客网站

1 本地环境 macOS10.14.14 node.js6.14.4 git1.9.2 hexo6.4.0 1.1 安装Node.js node -v1.2 安装配置Git 查看git是否安装成功 git --version2 GitHub操作 2.1 创建仓库 新建一个名为你的用户名.github.io的仓库&#xff0c;这里&#xff0c;我的github用户名是Wasabi123…

5 个鲜为人知的黑科技网站,强大到不敢想象

来源&#xff1a;王嘻嘻_5578 jianshu.com/p/1f85190d2f17①秘迹搜索②小白盘③优品PPT④拷贝兔⑤图片无限变大如今的网站是越来越多&#xff0c;但许多黑科技网站却是不为人知&#xff0c;其实现在的网站都跟APP的功能相似&#xff0c;甚至许多好网站会比APP的作用更强更全面。…

即点即用的office程序_建站ABC帮你解决抖音小程序流量变现的问题

抖音小程序有哪些优势&#xff1f;抖音小程序是基于字节跳动全产品(抖音、头条等)矩阵开发&#xff0c;不需用户进行独立下载&#xff0c;即点即用的全新应用。截止到目前&#xff0c;建站ABC平台已经拥有微信、百度、支付宝、抖音四款小程序系统&#xff0c;针对于四款产品&am…

ireport 分页配置每也显示多少条_网站建站基础第十七课(zblog的伪静态配置和修改)...

首先我们登陆zblog的后台&#xff0c;后台地址为你的域名/zb_system/login.php登陆后点击插件管理&#xff0c;启用静态管理中心1.3的插件启用后点击设置图标程序分为动态&#xff0c;伪静态&#xff0c;index.pgp式仿伪静态&#xff0c;我们根据实际情况选择对应的方法我们先要…

天秀!17 岁高中生独立开发全球疫情追踪网站后火了...

转自新智元【导读】疫情在全球蔓延&#xff0c;很多国家和地区的信息公开不及时&#xff0c;而普通民众又容易被流言误导&#xff0c;引发恐慌。西雅图一个 17 岁的高中生为解决这个问题搭建了一个网站&#xff0c;帮助人们获取必要的疾病信息和防护知识。疫情来临&#xff0c;…

17岁高中生制作世界上最大的新冠追踪网站之一,被CDC表扬

本文来自微信公众号&#xff1a;把科学带回家&#xff08;ID&#xff1a;steamforkids&#xff09;&#xff0c;作者&#xff1a;七君&#xff0c;题图来自&#xff1a;视觉中国现在国内在播报国外新冠疫情时&#xff0c;常常使用约翰霍普金斯大学建造的网站。这个网站的访问量…

由Nginx的引发的一些思考:如何优雅告知用户,网站正在升级维护?

1. 前言 2020-07-30早上到公司后&#xff0c;习惯性的打开掘金首页&#xff0c;想看下有没有自己感兴趣的文章&#xff0c;却意外的看到下面这样的惊喜&#xff1a; 对的&#xff0c;我升级Lv3了&#xff0c;这是对自己坚持写作1年多的认可与鼓励&#xff0c;难掩心中的开心&a…

ios支持video标签吗_视频网站不支持倍速播放功能?搞它

图片来源&#xff1a;pexels大家平时都很喜欢在网站上看视频吧&#xff0c;但是现在网站上的视频动不动就一个多小时&#xff0c;有的还不提供视频倍速功能&#xff1f;简直不能忍。一个小时的时间&#xff0c;2倍速&#xff0c;半小时看完&#xff0c;半小时去做其他事情不美吗…

除了 P 站,程序员在摸鱼时还喜欢上这些网站...

说到p站&#xff0c;估计不知道的人已经很少了&#xff0c;除了p站还有哪些站&#xff1f;场主盲猜&#xff0c;应该很多人思考过这个问题了 二次元可是有ABCDEFGKNMTP站等诸多圣地的&#xff01;外面的世界很精彩&#xff0c;别抱着一个站啃了~1、A站Acfun.tvAcFun&#xff0c…

别总写代码,这130个网站比涨工资都重要

热文推荐&#xff1a;尘埃落定&#xff01;清华才子王垠加入华为职级22&#xff0c;前阿里P10赵海平加入字节跳动&#xff0c;职级或为4百度网盘“破解版”&#xff0c;Pandownload开发者被抓来自&#xff1a;CSDN博主「爪白白」的文章链接&#xff1a;https://blog.csdn.net/q…

除了 P 站,程序员摸鱼还喜欢上哪些网站?

来源&#xff1a;搜罗软件说到p站&#xff0c;估计不知道的人已经很少了&#xff0c;除了p站还有哪些站&#xff1f;应该很多人思考过这个问题了 二次元可是有ABCDEGKNMT站...等等诸多圣地的&#xff01;外面的世界很精彩&#xff0c;别抱着一个站啃了~1、A站AcfunAcFun&#x…

一个使用 Kotlin 语言开发的天气网站

HiWeather介绍&#xff1a;这个项目是作为我的本科毕业设计而开发的。由于目前大多数网上能找到的 Kotlin Demo 都是Android项目&#xff0c;对于Web开发帮助有限&#xff0c;因此本人开源此项目作为一个参考&#xff0c;希望能够对各位有所帮助。后台登录天气预报技术&#xf…

阿里P8架构师详解JSON.parseObject最全最权威使用姿势

1 format1&#xff1a; // 转换成object JSONObject jo JSON.parseObject(result); // 获取object中returnAddress字段; jo.getString("returnAddress"); 2 format2 JSONArray detail JSON.parseArray(result…

爱了!自学编程首推这11个学习及刷题网站给你!

初学编程&#xff0c;很多人会选择先自学&#xff0c;那么这时候选择适合自己的学习平台是特别关键的&#xff0c;今天给大家整理了11个学习及刷题网站。 需要Java资料、项目源码、练手小游戏的可以私信我免费领取哟~ 一起来收藏起来&#xff01; 第一类&#xff1a;课程学习…

大型网站演变中的负载均衡场景,洞悉MySQL底层架构

这个阶段服务器的不可用&#xff0c;影响不是太大&#xff0c;因为在尝试阶段&#xff0c;都是种子用户进行尝试业务 小型阶段 业务得到市场认可&#xff0c;用户活跃基数慢慢变大&#xff0c;需要考虑****到系统的可用性和负载问题 到这个阶段一般会保证web应用服务的可用性…

偷偷浏览网站时,都有谁看到?

‍之前有朋友私信我&#xff0c;公司内网浏览会被监控/记录吗&#xff1f;答案是&#xff0c;yes。现在很多公司对公司内网进行监控&#xff0c;公司监控员工电脑行为对一些大中型企业来说更是普遍。内网监控软件对员工电脑监控行为且监控范围比较广泛&#xff0c;可对电脑屏幕…

live2d_二次元 | live2d为你的网站博客增加萌萌哒的看板娘

首先科普下什么是Live2D来源百度百科&#xff1a;Live2D是一种应用于电子游戏的绘图渲染技术&#xff0c;技术由日本Cybernoids公司开发。通过一系列的连续图像和人物建模来生成一种类似三维模型的二维图像&#xff0c;对于以动画风格为主的冒险游戏来说非常有用&#xff0c;缺…

小学生把自己学校的网站搞了!

相关阅读&#xff1a;2T架构师学习资料干货分享作者&#xff1a;Ret2Rttr来源&#xff1a;zhuanlan.zhihu.com/p/417528231本人7年级学生12岁 喜欢Pwn今天这篇文章来源于知乎上一个叫Ret2Rttr的分享&#xff0c;作者自称是一名六年级的小学生。文章主要记录的是他针对自己学校网…

一个基于 SpringBoot 开源的小说和漫画在线阅读网站,简洁大方 !

今天给大家推荐的这个开源项目是一个基于 SpringBoot 实现的小说和漫画在线阅读网站。需要源码和文档可以关注私信“外卖系统” 这个开源项目叫&#xff1a;fiction_house。 这个开源项目是一个多平台&#xff08;web、安卓 app、微信小程序&#xff09;、功能完善的小说弹幕…