Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >React markdown发布文章后展示[1]

React markdown发布文章后展示[1]

作者头像
用户4793865
发布于 2023-02-03 07:33:26
发布于 2023-02-03 07:33:26
59500
代码可运行
举报
文章被收录于专栏:前端小菜鸡yym前端小菜鸡yym
运行总次数:0
代码可运行

highlight: agate theme: channing-cyan


「这是我参与2022首次更文挑战的第25天,活动详情查看:2022首次更文挑战

源码地址: https://gitee.com/yang-yiming1234/umi_blog

前言

我们之前的文章已经实现了用markdown创建文章并且存入数据库中。如果想看之前的发布markdown的几篇文章,请看我的专栏 模仿掘金做个博客

那么这篇文章我们对存入数据库中的文章进行一个展示。我们这篇文章先实现一下如下的一个首页。

先说一下布局,我们就按照布局讲解:

  1. 头部 包括以下内容
  • tabs
  • 搜索框
  • 用户头像
  1. 主要内容
  • 左侧固定导航
  • 中部的文章简介
  • 右边的一个日历和一个天气展示布局样式
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<div className={style.container}>
      <div className={style.top}>
        <div className={style.top_left}>
           Tabs
        </div>
        <div className={style.top_center}>
           搜索框
        </div>
        <div className={style.top_right}>
          <div className={style.avator_con}>
             头像
          </div>
          <div className={style.author}>
            用户姓名标签
          </div>
        </div>
      </div>
      <div className={style.middle}>
        <div className={style.nav}>
         左侧导航
        </div>
        <div className={style.content}>
           文章简介展示
        </div>
        <div className={style.mine}>
          <Calender />
          <div className={style.mine_bottom}>
            <Weather />
          </div>
        </div>
      </div>
    </div>

头部

这里最好下载一下源码,然后对照着看。

Tabs搜索

Tabs组件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    // 引入 Tabs组件
    import { Tabs } from 'antd';
    // 解构出 TabPane    
    const { TabPane } = Tabs;
    // 文章类型 Tabs用的数据
    const [articleType, setArticleType] = useState([]);
    // 查询文章接口 tabs和搜索框共用
    const searchAuthorOrTitle = (search=searchParams) => {
    getArticle(search).then(res => {
      const { data } = res;
      setArticles(data);
    });
  };
    // 在useEffect中请求接口 也就是页面加载就请求
    useEffect(() => {
     // 请求文章类型接口
    getArticleType({}).then(res => {
      // 这个数据作为Tabs的“全部”选项 传空参数
      let temp = [{ id: 0, type: '' }];
      // 将{ id: 0, type: '' }和接口数据合并 
      temp = [...temp, ...res.data];
      // 赋值给articleType
      setArticleType(temp);
    });
  }, []);
     <div className={style.top_left}>
          <Tabs
            // 正常来说 key最好别用中文,我这里为了方便key都是中文。
            // defaultActiveKey 默认选中的key
            defaultActiveKey={'全部'}
            // 选择其他Tab
            onChange={key => {
             //改变查询参数
              setSearchParams({ ...searchParams, type: key });
             // 调用查询文章接口
              searchAuthorOrTitle({ ...searchParams, type: key });
            }}
          >
          {/*  渲染Tabs */}
            {articleType.map((item, index) => (
            // 如果type的值是空 展示 '全部'
              <TabPane tab={item.type === '' ? '全部' : item.type} key={item.type} />
            ))}
          </Tabs>

对应样式

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.top {
    width: 100%;
    height: 70px;
    text-align: center;
    padding: 10px;
    display: flex;
    // 固定
    position: fixed;
    z-index: 9;
    background-color: #eff0f4;

    .top_left {
      flex: 1;
      padding-left: 20px;
      padding-right: 20px;
    }
}

输入框搜索

Input组件

  • 这里将按钮放入了输入框内部,用的是suffix这个属性。然后按钮里用到了图标SearchOutlined
  • 我们这个输入框想要查询题目和作者,那么我们就同时将查询参数的title和username都赋值 在后端的SQL语句中使用OR条件进行查询。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { Col, Row, Input, Button, Tabs, Tag, Avatar } from 'antd';
import { SearchOutlined, GithubOutlined, CalendarOutlined } from '@ant-design/icons';

      <div className={style.top_center}>
          <Input
            placeholder="搜索🔍题目、作者"
            style={{ borderRadius: '20px', width: '100%' }}
            // 改查询参数
            onChange={e => {
              setSearchParams({
                title: e.target.value,
                username: e.target.value,
              });
            }}
            suffix={(
            // 点击按钮调用查询接口也就是跟刚才Tabs一样的接口              
            <Button
                type="primary"
                shape="circle"
                icon={<SearchOutlined />}
                onClick={() => {
                  searchAuthorOrTitle();
                }}
              />
            )}
          />
        </div>

样式

只是控制 搜索框的位置 和长度

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 .top_center {
      flex: 1;
    }

头像

Avatar组件

如果不使用Avatar组件,我们用img去渲染头像的话。会失真、形状改变。

Tag 组件 传入 color参数来改变颜色

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { Col, Row, Input, Button, Tabs, Tag, Avatar } from 'antd';
  <div className={style.top_right}>
        <div className={style.avator_con}>
          <Avatar
            className={style.avator}
            src="https://gw.alipayobjects.com/zos/antfincdn/LlvErxo8H9/photo-1503185912284-5271ff81b9a8.webp"
          />
        </div>
        <div className={style.author}>
          <Tag color="#108ee9">{userInfo.username}</Tag>
        </div>
      </div>

样式

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  .top_right {
      flex: 1;
      padding-right: 10px;
      display: flex;
      justify-content: right;

      .avator_con {
        width: 50px;
        height: 50px;
        border-radius: 50%;
        margin-right: 5px;

        .avator {
          width: 50px;
          height: 50px;
          border-radius: 50%;
       
        }
      }

      .author {
        line-height: 50px;
        font-weight: 600;
      }

    }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-02-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
类型即正义:TypeScript 从入门到实践(二):函数、交叉/联合类型与类型守卫
了解了基础的 TS 类型,接口之后,我们开始了解如何给更加复杂的结构注解类型,这就是我们这节里面要引出的函数,进而我们讲解如何对类型进行运算:交叉类型和联合类型,最后我们讲解了最原子类型:字面量类型,以及如何与联合类型搭配实现类型守卫效果。
一只图雀
2020/04/15
2.8K0
类型即正义:TypeScript 从入门到实践(二):函数、交叉/联合类型与类型守卫
React markdown发布文章后展示[2]
highlight: a11y-dark theme: channing-cyan
用户4793865
2023/02/03
5090
带来一个react插件的使用方式---- video-react
react社区的兴起,带来了很多react相关的插件,今天遇到了关于视频播放的功能,本想着用原生的代码写,可是发现了原生视频的功能完全不能满足业务的需求,需要另外定制. 今天带来一个video-react功能使用: 首先安装: yarn add video-react --save; 安装到项目的下. 第二步: 在全局引入video-react 的css样式,如果在 less中 // 视频css @import "../../node_modules/video-react/dist/video-react
杭州前端工程师
2018/06/15
3.3K0
建站四部曲之前端显示篇(React+上线)
本系列分为四篇: 建站四部曲之后端接口篇(SpringBoot+上线) 建站四部曲之Python数据爬虫篇(selenium) 建站四部曲之前端显示篇(React+上线) 建站四部曲之移动端篇(Android) ---- 零、前言 本系列为了总结一下手上的知识,致敬我的2018 本篇的重点在于:用前两篇的数据使用React搭建一个简单网站 本篇总结的技术点: React的组件封装、React实现简单的懒加载、React中的网络请求、搜索功能 React中form表单与接口的对接、路由react-
张风捷特烈
2018/12/26
3.5K0
vue.js客服系统实时聊天项目开发(三)实现对话框聊天界面
.chatRow 中的 align-items: flex-end; 让其子元素在底部对齐,实现头像垂直方向靠下对齐
唯一Chat
2023/01/15
4.9K0
React 实现一个markdown[2]
theme: channing-cyan highlight: a11y-light
用户4793865
2023/02/03
1.2K0
【腾讯云 Cloud Studio 实战训练营】当我还在恐龙扛狼,隔壁IDE竟然已经卷成这样了
手动bgm:沃没K~ 恐龙扛浪扛浪扛~ 恐龙扛浪扛浪扛~ 沃没K~ 布鲁biu布鲁biu~
用户10685539
2023/07/31
4600
【腾讯云 Cloud Studio 实战训练营】当我还在恐龙扛狼,隔壁IDE竟然已经卷成这样了
BuildAdmin19:如何使用el-popover弹出框,实现个人资料页面
作为从拆解实现buildadmin入手学习前端系列的第19篇,buildadmin的框架建设部分已经接近了尾声,导航菜单栏作为框架的最后一部分,在之前实现了全屏、回到首页以及上一篇暗黑模式的切换。
叫我阿柒啊
2024/09/24
5830
BuildAdmin19:如何使用el-popover弹出框,实现个人资料页面
类型即正义:TypeScript 从入门到实践(序章)
因为需要尽可能全且精炼的讲解 TypeScript 语法知识,所以我们需要一个恰到好处的实战项目,这一小节主要是用于讲解我们准备初始 TypeScript 版本的 React 项目代码的过程,在下一个小节中我们将会结合 React 项目代码,真正开始 TypeScript 语法的讲解。
一只图雀
2020/04/15
1.6K0
类型即正义:TypeScript 从入门到实践(序章)
【腾讯云 Cloud Studio 实战训练营】使用Cloud Studio快速构建React完成点餐H5页面还原
IDE(集成开发环境)是一种软件工具,旨在为开发者提供一个集成的开发平台,其中包含了各种用于编写、调试和部署应用程序的工具和功能。IDE通常提供代码编辑器、编译器、调试器、版本控制、构建工具等,可以帮助我们更高效地进行软件开发。
祁画
2023/08/04
2420
【腾讯云 Cloud Studio 实战训练营】使用Cloud Studio快速构建React完成点餐H5页面还原
【腾讯云 Cloud Studio 实战训练营】基于Cloud Studio构建React完成点餐H5页面
Cloud Studio 是 基于浏览器的集成式开发环境(IDE),为开发者提供了一个永不间断的云端工作站。用户在使用 Cloud Studio 时无需安装,随时随地打开浏览器就能在线编程。
呆呆敲代码的小Y
2023/08/07
2500
【腾讯云 Cloud Studio 实战训练营】基于Cloud Studio构建React完成点餐H5页面
Vue 2.x折腾记 - (20) JSX在业务中的具体实践以及跟React书写的差异化
Vue的jsx,能够支持部分vue独有的特性,比如拿到computed, 指令及自定义事件;
CRPER
2019/05/31
7390
5w字长文带你【从0使用NextJS+SSR开发博客系统】 | 技术创作特训营第五期
Next.js 是一个用于构建 React 应用程序的 React 框架。它的目标是使 React 应用的开发变得更简单、更灵活。下面是一些 Next.js 的关键特性:
程序员库里
2024/02/05
1.8K1
腾讯云 Cloud Studio 实战训练营——快速构建React完成点餐H5页面
准备好素材图(如首页的banner、食物图片等),然后点击链接跳转到官网,并点击“注册/登录”。
用户9832417
2023/07/29
2500
【腾讯云 Cloud Studio 实战训练营】使用Cloud Studio快速构建React完成点餐H5页面还原
Cloud Studio 是基于浏览器的集成式开发环境(IDE),为开发者提供了一个永不间断的云端工作站。用户在使用 Cloud Studio 时无需安装,随时随地打开浏览器就能在线进行开发、测试和部署,使开发者可以快速且轻松地进行生产力工作,而不必担心复杂的配置和环境维护。 。
旺仔欣欣冬冬糖
2023/08/07
2560
【腾讯云 Cloud Studio 实战训练营】使用Cloud Studio快速构建React完成点餐H5页面还原
Hooks + TS 搭建一个任务管理系统(二)-- 项目列表展示
在我们写好登录注册界面后,我们需要开始解决登录后的项目列表展示页,这也是我们在自动登录后显示的页面
小丞同学
2021/10/22
8100
【腾讯云Cloud Studio实战训练营】React 快速构建点餐页面
Cloud Studio是一个在线的云集成开发环境(IDE),可以让开发人员在浏览器中轻松地开发、测试、调试和部署应用程序。它提供了基于云的计算资源和工具,例如代码编辑器、编译器、调试器、版本控制系统和项目管理工具等,使开发人员可以在任何地点使用任何设备进行开发,而不需要在本地安装软件。CloudStudio还能够集成多个云计算平台(如AWS和Azure)和其他开发工具,以帮助开发人员更方便地进行云原生应用程序的构建和部署。
热爱编程的小白白
2023/08/11
2740
【腾讯云Cloud Studio实战训练营】React 快速构建点餐页面
React 折腾记 - (7) 基于React+Antd封装聊天记录(用到React的memo,lazy, Suspense这些)
前言 在重构的路上,总能写点什么东西出来 , 这组件并不复杂,放出来的总觉得有点用处 一方面当做笔记,一方面可以给有需要的人; 有兴趣的小伙伴可以瞅瞅... 效果图 实现的功能 渲染支持图片,文字,图
CRPER
2018/12/14
1.9K0
React 折腾记 - (7) 基于React+Antd封装聊天记录(用到React的memo,lazy, Suspense这些)
【腾讯云 Cloud Studio 实战训练营】使用云IDEA,快速构建React完成点餐H5页面
最近受邀参加了【腾讯云 Cloud Studio 实战训练营】的活动。随着活动的进行,经过老师们的讲解,我加深了对 Cloud Studio 的理解,所以写下本篇文章来介绍下它的使用。
阿Q说代码
2023/08/21
4500
【腾讯云 Cloud Studio 实战训练营】使用云IDEA,快速构建React完成点餐H5页面
你的网站或许不需要前端构建
本文使用「署名 4.0 国际 (CC BY 4.0)」许可协议,欢迎转载、或重新修改使用,但需要注明来源。 署名 4.0 国际 (CC BY 4.0)
soulteary
2023/03/05
6590
你的网站或许不需要前端构建
推荐阅读
类型即正义:TypeScript 从入门到实践(二):函数、交叉/联合类型与类型守卫
2.8K0
React markdown发布文章后展示[2]
5090
带来一个react插件的使用方式---- video-react
3.3K0
建站四部曲之前端显示篇(React+上线)
3.5K0
vue.js客服系统实时聊天项目开发(三)实现对话框聊天界面
4.9K0
React 实现一个markdown[2]
1.2K0
【腾讯云 Cloud Studio 实战训练营】当我还在恐龙扛狼,隔壁IDE竟然已经卷成这样了
4600
BuildAdmin19:如何使用el-popover弹出框,实现个人资料页面
5830
类型即正义:TypeScript 从入门到实践(序章)
1.6K0
【腾讯云 Cloud Studio 实战训练营】使用Cloud Studio快速构建React完成点餐H5页面还原
2420
【腾讯云 Cloud Studio 实战训练营】基于Cloud Studio构建React完成点餐H5页面
2500
Vue 2.x折腾记 - (20) JSX在业务中的具体实践以及跟React书写的差异化
7390
5w字长文带你【从0使用NextJS+SSR开发博客系统】 | 技术创作特训营第五期
1.8K1
腾讯云 Cloud Studio 实战训练营——快速构建React完成点餐H5页面
2500
【腾讯云 Cloud Studio 实战训练营】使用Cloud Studio快速构建React完成点餐H5页面还原
2560
Hooks + TS 搭建一个任务管理系统(二)-- 项目列表展示
8100
【腾讯云Cloud Studio实战训练营】React 快速构建点餐页面
2740
React 折腾记 - (7) 基于React+Antd封装聊天记录(用到React的memo,lazy, Suspense这些)
1.9K0
【腾讯云 Cloud Studio 实战训练营】使用云IDEA,快速构建React完成点餐H5页面
4500
你的网站或许不需要前端构建
6590
相关推荐
类型即正义:TypeScript 从入门到实践(二):函数、交叉/联合类型与类型守卫
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验