React实战入门课程:dva开发一个cnode网站(2)

news/2024/5/20 3:31:07/文章来源:https://blog.csdn.net/elite1991/article/details/85081105

今天来学习第二节课程,完成列表数据的展示

效果:
首页列表

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_801634.aspx

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

相关文章

React实战入门课程:dva开发一个cnode网站(3)

完成详情页渲染&#xff0c;用到了react-markdown来渲染 先看效果&#xff1a; 1 在components下新建Detail.js import React , { Component }from react; import { Card, Avatar, Spin, Icon,Comment, Tooltip, List} from antd; import PropTypes from prop-types; import …

React实战入门课程:dva开发一个cnode网站(4)

增加分类标签&#xff0c;效果如下&#xff1a; 1 修改ListData组件 完整代码&#xff1a; import React , { Component }from react; import { List, Avatar, Icon, Spin ,Tag } from antd; import PropTypes from prop-types; import { connect } from dva; import ./my.c…

Castle开发系列文章上了Castle的官方网站

最近有些忙&#xff0c;Blog更新的速度明显有些慢了&#xff0c;也是很久没有上Castle的官方网站了&#xff0c;今天Terry82&#xff08;跟我名字有点像&#xff09;的朋友告诉我Castle 开发系列文章在Castle官方网站上有链接&#xff0c;上去看了一下&#xff0c;还真是&#…

jitter 如何优化网络_网络营销专员浅析网络营销过程中如何做好网站权重流量的优化...

在搜索引擎中通过检索关键词后所展示出来的首页网站大多都有着不错的流量和权重&#xff0c;这对于企业网站来说是网站优化运营和网络营销推广专业水准的体现&#xff0c;这也是无数专业人士背后默默运营得出的结果。通常情况下&#xff0c;网站权重和流量越高&#xff0c;搜索…

如何bin部署sqlce4.0的ASP.NET mvc3网站

参考这里&#xff1a; How to Bin Deploy SQL Compact Edition 4.0 and Razor web projects With the release of VS2010 SP1 Beta1, Web Matrix, and Razor QFE, we can build web projects containing SQL Compact Edition 4.0 sdf file and ASP.NET Web Pages with Razor s…

sitemap-php生成网站地图

根据SEO需要生成站点地图有利于百度爬虫收录&#xff0c;后台需要生成sitemap.xml 文件&#xff0c;内容是站点链接&#xff0c;效果如图 开始后台管理模版&#xff0c;页面比较粗糙 下面开始代码部分&#xff1a; 我使用的是hyperf框架&#xff0c;所以把 Sitemap类&#xff…

php 生成网站地图txt

根据SEO需要生成站点地图有利于百度爬虫收录&#xff0c;后台需要生成sitemap.txt 文件&#xff0c;内容是站点链接&#xff0c;效果如图 开始后台管理模版&#xff0c;页面比较粗糙 下面开始代码部分&#xff1a; public function sitemaptxt() {$host request()->input(…

网站上做企业微信扫码授权登录怎么做?(超详细教程)

企业微信已经搞了这一套完整的教程&#xff01; https://developer.work.weixin.qq.com/tutorial/detail/56 第1步&#xff1a;企业微信自建应用 第2步&#xff1a;浏览企业微信开发文档 企业微信的开发文档&#xff1a; 企业微信API 第3步&#xff1a;企业微信自建应用设置授…

三、自定义网站(一) Previewing and applying a theme

Orchard提供了功能强大并且简单易用的主题系统。Orchard默认包含了一个主题。 Managing Themes 在控制面板中点击 Themes进入主题管理. 转载于:https://www.cnblogs.com/ibrady/archive/2012/03/20/2407433.html

head first python 支持网站(可下载所有的代码和示例)

http://examples.oreilly.com/0636920003434/ 转载于:https://www.cnblogs.com/apple2016/p/5298907.html

5个功能强大的工具网站,实用性超强,收藏起来吧!

1.音乐搜索器 一个汇集了许多音乐的网站。支持用户下载网易云&#xff0c;QQ 音乐&#xff0c;酷狗等各大主流网站的音乐&#xff0c;只需要输入歌名、音乐ID或者复制链接&#xff0c;就可以一键下载。 2.最美应用 一个推荐一些实用、创新应用的网站&#xff0c;各种类型都…

10个资源满满的网站,偷偷收藏起来吧!

大家一般找资源肯定会先想到百度搜索&#xff0c;可是有时候度娘资源也是有限的。想要的资源找不到怎么办&#xff1f;别担心&#xff0c;今天给大家分享10个资源超级丰富的网站&#xff0c;赶快来看看吧&#xff01; 1.有妖气 中国唯一且最大的纯原创漫画网站&#xff0c;数…

推荐6个鲜为人知的强力网站,每一个都让你大开眼界

1&#xff1a;全国电视直播 http://bddn.cn/zb.htm 全国电视直播是最近发现的一个非常良心的电视直播网站&#xff1b;它支持几百个电视直播的网站&#xff0c;包括&#xff1a;港澳台卫视&#xff1b;网站界面简洁&#xff0c;没有任何广告&#xff0c;并且播放速度和加载速…

10个免费高清图片网站,良心推荐,收藏就是学会了

我来分享一波无版权的高清素材库。 1、Pixabay 一个拥有160万个可在任何地方使用的免费无版权图片&#xff0c;有需要的小伙伴都可以下载。 2、Pexels 网站上提供大量的高清图片&#xff0c;上面的所有图片都可以免费商用。 3、Unsplash 这个网站上主打风景摄影图&#xff0…

交互设计必备的10个网站|每一个都是精挑细选,请低调使用

我来啦&#xff0c;给大家分享一些个人觉得比较好的设计网站&#xff1a; 为了帮助你快速的获得设计灵感&#xff0c;我准备了一份设计师必备素材库大礼包&#xff0c;包含多个APP设计、电商设计、HTML5、插画、logo设计、ICON等行业优秀作品案例&#xff0c;私信即可获取。 1…

给你5分钟白漂:这些都是我的常用在线工具网站

小伙伴们大家好&#xff0c;本期再托一次家底&#xff0c;和大家分享十几个自己日常工作学习过程中的常用在线工具和网站&#xff0c;希望能有帮助。 也欢迎小伙伴们分享和安利出你们觉得有用的工具&#xff0c;不要停啊。 在线绘图神器 很多小伙伴咨询说博客文章里的技术图怎…

linux平台驱动运行空间,构造和运行模块 - Linux设备驱动程序笔记_Linux编程_Linux公社-Linux系统门户网站...

&#xff1a;设置测试系统首先准备好一个内核源码树&#xff0c;构造一个新内核&#xff0c;然后安装到自己的系统中。&#xff1a;HelloWorld模块#include //定义了驱动的初始化和退出相关的函数#include //定义了内核模块相关的函数、变量及宏MODULE_LICENSE("Dual BSD/…

linux 基因组数据下载,phytozome植物基因组下载网站

Phytozome 作为专门收录植物基因组的网站&#xff0c;在基因组数据的下载、查询、可视化浏览等方面做的也很不错&#xff0c;也是一个不错的基因组数据下载数据库。今天主要介绍一下该网站基因组如何下载&#xff0c;如何通过blast查询同源基因&#xff0c;以及根据基因相关功能…

10个免费的python学习网站 赶紧收藏吧!!!

1.Learn Python The Hard Way(笨办法学python) https://learnpythonthehardway.org/ 这绝对是学习Python最简单的方法。你会被如此简单的基础学习感到震惊&#xff0c;真实地感受到自己的学习历程&#xff0c;一步一步地获取新的知识。它非常鼓励学习者去尝试并创造出自己的程…

学习Python必去的8个网站!

作为一个现时代的程序员初学者&#xff0c;除了看书之外&#xff0c;互联网的学习手段也是断不能少的&#xff01; 以下这些网站&#xff0c;虽说不上全方位的满足你的需求&#xff0c;但是大部分也都能&#xff01; 0.国外的大神GitHub &#xff1a; https://github.com/py…