dva开发一个cnode网站(3)

news/2024/4/27 19:14:15/文章来源:https://blog.csdn.net/weixin_34111819/article/details/88684445
完成详情页渲染,用到了react-markdown来渲染
先看效果:

效果

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 { connect } from 'dva';
import  ReactMarkdown from 'react-markdown';
import './my.css';class Detail extends Component{render() {const { Meta } = Card;return (<Spin spinning={this.props.loading.global}size='large'tip="数据正在加载中">{typeof(this.props.data.author)=='object' ? (<Card><Cardtype="inner"title={<div><Avatar src={this.props.data.author.avatar_url} />&nbsp;&nbsp;&nbsp;<span style={{fontSize :26}}>{this.props.data.title}</span></div>}extra={<div>发布于{this.props.data.create_at} *作者{this.props.data.author.loginname}*  {this.props.data.visit_count}次浏览  *来自 分享</div>}><ReactMarkdown source={this.props.data.content} /></Card><Cardtype="inner"title={this.props.data.reply_count+'个回复'}><ListclassName="comment-list"itemLayout="horizontal"dataSource={this.props.data.replies}renderItem={item => (<Commentauthor={item.author.loginname}avatar={item.author.avatar_url}content={<ReactMarkdown source={item.content} />}datetime={item.create_at}/>)}/></Card></Card>) : ''}</Spin>)}componentWillMount () {const { par } = this.propsthis.props.dispatch({ type: 'detail/find', payload: { id:par} })}
}Detail.propTypes = {id: PropTypes.string.isRequired,
};function mapStateToProps(state) {const {id,data} = state.detail;return {id,data,loading:state.loading};
}// export default ListData;
export default connect(mapStateToProps)(Detail);

用到了antd中的一些组件,可以自己去官网参考下怎么用。 my.css里面定义了一些样式,主要解决markdown渲染后里面的图片太宽,重新设置宽度。


a{text-decoration:none;color:#333;
}img{max-width: 1300px;
}

2 在models下创建对应的model detail.js

import * as listService from '../services/list';
export default {namespace: 'detail',state:{id:'',data:{}},effects: {*find({ payload: { id } }, { call, put }) {const result = yield call(listService.find, { id })yield put({type: 'updateData',payload: {result,id}})}},reducers: {'updateData'(state, { payload: data }) {let r = data.result.dataconst {id} = datareturn {...state,id,data:r}}},subscriptions : {setup({ dispatch, history }) {}
},
};

3 在service中添加获取详情的api list.js

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

mdrender参数设置为false来获取markdown数据,truehtml数据

4 创建详情页routes/DetailPage.js

import React from 'react';
import { connect } from 'dva';
import Header from '../components/Header';
import Detail from '../components/Detail';function DetailPage(props) {const {params} = props.matchreturn (<div><Header keys={['index']}/><div style={{paddingTop:20,paddingLeft:100,paddingRight:100,paddingBottom:50}}><Detail par={params.id}/></div></div>);
}DetailPage.propTypes = {
};export default connect()(DetailPage);

使用了自己定义的HeaderDetail组件。在router.js中邦定路由到页面:

import React from 'react';
import { Router, Route, Switch } from 'dva/router';
import IndexPage from './routes/IndexPage';
import DetailPage from './routes/DetailPage';function RouterConfig({ history }) {return (<Router history={history}><Switch><Route path="/" exact component={IndexPage} /><Route path="/detail/:id" exact component={DetailPage} /></Switch></Router>);
}export default RouterConfig;

使用了参数路由,在DetailPage.js中,从props.match.params中就可以取到id值传给Detail组件

5 别忘了在index.js中注册model以及插件

import dva from 'dva';
import './index.css';
import createLoading from 'dva-loading';// 1. Initialize
const app = dva();// 2. Pluginsapp.use(createLoading());// 3. Model
app.model(require('./models/listdata').default);
app.model(require('./models/detail').default);// 4. Router
app.router(require('./router').default);// 5. Start
app.start('#root');

前面两节课忘说dva-loading了,需要在这里使用,才能在组件中获取loading属性

6 在ListData组件中加入路由跳转详情页

import {Link} from 'dva/router';
<Link to={'/detail/'+item.id}>{item.title}</Link>

使用了Link来做跳转,顺带把我们的Header组件的跳转也给改了

 <Menu.Item key="index"><Link to="/"><Icon type="appstore" />首页</Link></Menu.Item><Menu.Item key="into"><Link to="/into"><Icon type="appstore" />新手入门</Link></Menu.Item><Menu.Item key="api"><Link to="/api"><Icon type="appstore" />API</Link></Menu.Item><Menu.Item key="about"><Link to="/about"><Icon type="appstore" />关于</Link></Menu.Item><Menu.Item key="reg"><Link to="/reg"><Icon type="appstore" />注册</Link></Menu.Item><Menu.Item key="login"><Link to="/login"><Icon type="appstore" />登陆</Link></Menu.Item>

大功告成看看效果

成果

欢迎关注我的公众号mike啥都想搞,学习更多内容。
mike啥都想搞

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

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

相关文章

打开网站提示:SQLSTATE[08004] [1040] Too many connections(rm trash 搞定)

打开网站提示&#xff1a; SQLSTATE[08004] [1040] Too many connections wd面板提示&#xff1a; 无法连接mysql&#xff0c;请检查mysql是否已启动及用户密码是否设置正确!: 硬件上&#xff0c;是否存在服务器存储空间不足&#xff1f;服务器空间不足的话会卡住mysql&…

打开网站报数据库错误 is marked as crashed and should be repaired (搞定)

今天打开网站随便点击内容 报 is marked as crashed and should be repaired。 根据实际情况我的方法执行下面方法1&#xff0c;单个数据库修复 就搞定了。 命令行方式&#xff1a; 打开【开始】--【运行】 输入cmd回车&#xff0c;在弹出的黑框里面视情况输入以下命令&…

Springboot网站角标个性化

网站角标个性化 在SpringBoot2.2.x之前的版本中Spring Boot对Favicon进行了默认支持。 只需要将favicon.ico图标文件放在四个静态资源目录任意一个。 并需要在application.yml中通过如下配置关闭默认的图标 spring.mvc.favicon.enabledfalse #关闭这样简单的方式下&#xff0c;…

SpringBoot 自定义banner及网站图标

SpringBoot 自定义banner及网站图标 什么是banner? SpringBoot项目启动时会在控制台打印一个默认的启动图案&#xff0c;这个图案就是我们要讲的banner。 自定义banner 可自己进行设计或通过网上制作工具进行banner图案制作&#xff0c; 网上有许多banner制作网站&#x…

网站访问量怎么刷_杭州信息服务网站优化页面优惠贴牌

百猫搜网络技术有限公司为您详细解读LQPrUg信息服务网站优化页面优惠贴牌的详情,百猫搜建站优化霸屏系统&#xff0c;100%全托管&#xff0c;保上词&#xff0c;为客户个性化定制营销网站&#xff0c;seo优化该网站实现关键词不限热度指数&#xff0c;1-7天上首页&#xff0c;并…

wordpress部署ssl_推荐一款比WordPress建站还简单的智能工具,而且免费哦

互联网时代&#xff0c;越来越多的企业与个人开始建立自己的网站&#xff0c;但是传统的手工建站并不简单&#xff0c;它需要设备支持、前端设计&#xff0c;后台编程&#xff0c;测试优化等一系列环节&#xff1b;而大部分企业与个人其实并不具备这样的技能和资金条件。那是否…

有css和html创建站点,先建立css还是html?

很多朋友都有自己的习惯&#xff0c;有的人喜欢先写CSS&#xff0c;有的人喜欢先写HTML&#xff0c;那么网页布局最科学的写法流程是什么呢&#xff1f;对于一个新手而言&#xff0c;在有了一点html知识之后&#xff0c;对于CSS、DIV都感觉特别的疑惑&#xff0c;不知道这其中到…

冯偌依曼计算机存储体系,太原2021中考分数线是多少官方网站

太原2021中考分数线是多少官方网站。高职扩招丰富了生源构成&#xff0c;促进职业教育与继续教育大融合&#xff0c;倒逼高职教育完善考试招生办法、创新人才培养模式&#xff0c;带动办学条件改善和评价机制改革&#xff0c;彰显了职业教育的类型特征&#xff0c;成为职业教育…

【大型网站性能优化实战】学习笔记(一)

【大型网站性能优化实战】学习笔记&#xff08;一&#xff09; 基于用户体验的性能优化要素 1.页面用户体验的要素介绍 用户体验: 抽象,带有强烈的主观意识 难以量化 我觉得这样会更好 我认为用户喜欢这样或者那样 ...... 从用户打开浏览器,浏览网页的感知过程,我们分…

网站注册邮件发送功能实现

摘抄自狂神笔记 电子邮件 要在网络上实现邮件功能&#xff0c;必须要有专门的邮件服务器。 这些邮件服务器类似于现实生活中的邮局&#xff0c;它主要负责接收用户投递过来的邮件&#xff0c;并把邮件投递到邮件接收者的电子邮箱中。 SMTP服务器地址&#xff1a;一般是 smtp…

《时代》评出50个最酷网站 25个网站非上不可

从2003年开始&#xff0c;《时代》周刊每年都会评选出一系列最受欢迎的网站&#xff0c;在这些网站身上我们不难看出互联网的变革与发展&#xff0c;同时清楚的认识到什么样的网站能够引领潮流。北京时间7月10日&#xff0c;美国《时代》周刊近日公布了2007年50个最受欢迎的网站…

转载:LAMP网站架构方案分析

LAMP&#xff08;Linux-Apache-MySQL-PHP&#xff09;网站架构是目前国际流行的Web框 架&#xff0c;该框架包括&#xff1a;Linux操作系统&#xff0c;Apache网络服务器&#xff0c;MySQL数据库&#xff0c;Perl、PHP或者Python编程语言&#xff0c;所有组成产品均是开源软 件…

高并发网站的演变和优化

一&#xff0c;什么是高并发 高并发是互联网分布式系统架构设计中必须考虑的因素之一&#xff0c;通常指&#xff1a;通过设计保证能够同时并行处理很多请求。 高并发指标&#xff1a; 响应时间&#xff1a;系统对请求做出响应时间。例如系统处理一个HTTP请求需要200ms,这个200…

iis网站报错:您试图从目录中执行CGI、ISAPI 或其他可执行程序,但该目录不允许执行程序...

本人使用WIN2003 INTERNET信息服务&#xff08;IIS&#xff09;管理器建立一个网站虚拟目录&#xff0c;结果浏览网页时出现错误&#xff0c;错误提示信息大体如此&#xff1a; 该页无法显示 您试图从目录中执行 CGI、ISAPI 或其他可执行程序&#xff0c;但该目录不允许执行程…

值得收藏!最佳26个国外 CSS 酷站推荐网站

这个列表收集的最佳26个国外 CSS 酷站推荐网站对于网页设计师和 Web 开发人员都非常有用。设计师可以从下面列出的这些网站获取优秀的设计理念和流行的设计趋势&#xff0c;获取大量的创作灵感&#xff0c;进而设计出更有创意的作品。如果你有收藏这个列表中遗漏的网站&#xf…

网站统计中的数据收集原理及实现(转)

本文转自codinglabs&#xff0c;原文地址&#xff1a;http://www.codinglabs.org/html/how-web-analytics-data-collection-system-work.html 网站数据统计分析工具是网站站长和运营人员经常使用的一种工具&#xff0c;比较常用的有谷歌分析、百度统计和腾讯分析等等。所有这些…

数据获取网站分享

内容来自悟空智能科技公众号&#xff0c;侵权删。 1公开的数据库 &#xff0d; 国家数据 &#xff0d; http://data.stats.gov.cn/index.htm 数据来源于中国国家统计局&#xff0c;包含了我国经济民生等多个方面的数据&#xff0c;并且在月度、季度、年度都有覆盖&#xff0…

浅谈前端中的onmouseover 事件

修改别人的模板遇到一个问题&#xff0c;分类图的切换默认是五个&#xff0c;我想增加四个&#xff0c;一直没有增加成功。它使用的onmouseover 事件。 去查了一下&#xff1a; 定义和用法 onmouseover 事件会在鼠标指针移动到指定的对象上时发生。 语法 οnmοuseοver"…

Docker系列器十:docker-compose和网站的负载均衡

Docker应用中&#xff0c;为了达到高可用&#xff0c;可以做很多的web服务&#xff0c;保持服务的稳定性&#xff0c;在web的出口处是haproxy等负载应用。 命令&#xff1a; 在和yml文件的同文件下&#xff0c;执行任何的docker-pose的命令&#xff0c;否则是提示找不到文件的…

大型网站系统架构的演化

http://www.cnblogs.com/leefreeman/p/3993449.html 前言 一个成熟的大型网站&#xff08;如淘宝、京东等&#xff09;的系统架构并不是开始设计就具备完整的高性能、高可用、安全等特性&#xff0c;它总是随着用户量的增加&#xff0c;业务功能的扩展逐渐演变完善的&#xff0…