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

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

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

highlight: a11y-dark theme: channing-cyan


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

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

这篇文章我们实现主要的内容

左侧导航

数组

首先它有一个数组用于遍历,内容有 跳转链接、文本内容、图标组件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const menu = [
    {
      link: '/client/markdown',
      title: '创建文章',
      icon: <IconFont type="iconPensyumaobi1" style={{ fontSize: '20px' }} />,
    },
    {
      link: '/client/markdown',
      title: '创作者信息',
      icon: <IconFont type="iconchuangzuozhezhongxin" style={{ fontSize: '20px' }} />,
    },
    {
      link: '/client/markdown',
      title: '优秀作者推荐',
      icon: <IconFont type="iconzhengshu" style={{ fontSize: '20px' }} />,
    },
    {
      link: '/client/markdown',
      title: '我的',
      icon: <IconFont type="iconwode" style={{ fontSize: '20px' }} />,
    },
    {
      link: '/client/markdown',
      title: '讨论社区',
      icon: <IconFont type="iconshequ4" style={{ fontSize: '20px' }} />,
    },
    {
      link: '/client/markdown',
      title: '书籍分享',
      icon: <IconFont type="iconwupin-shuji" style={{ fontSize: '20px' }} />,
    },
    {
      link: '/client/markdown',
      title: '签到',
      icon: <IconFont type="iconqiandao" style={{ fontSize: '20px' }} />,
    },
  ];

逻辑代码

用map遍历,使用 <Link> 进行跳转,直接将图标组件放到{}中进行渲染

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { Link, useRequest, useHistory } from 'umi';
<div className={style.middle}>
        <div className={style.nav}>
          {menu.map((item, index) => (
            <div className={style.navbar} key={index}>
              <Link to={item.link} style={{ color: 'white' }}>
                <span style={{ marginRight: '6px' }}>{item.icon}</span>
                {item.title}
              </Link>
            </div>
          ))}
  </div>

样式

主要是 .nav 的位置固定。以及每一个navbar 的悬停效果和动画

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.middle {
    width: 100%;
    height: calc(100%);
  }

  .nav {
    width: 20%;
    height: calc(88%);
    border-radius: 20px;
    background-color: #fefefe;
    box-shadow: 0 5px 5px #888;
    padding: 10px;
    padding-top: 20px;
    position: fixed;
    left: 30px;
    top: 70px;
    float: left;
    clear: both;

    .navbar {
      width: 100%;
      margin-top:40px;
      background-color: #4c9eeb;
      height: 40px;
      text-align: center;
      line-height: 40px;
      border-radius: 10px;
      //
      transition: all .4s cubic-bezier(.215, .610, .355, 1);
    }
     .navbar:hover {
      width: 115%;
      z-index: 10;
      transition: all .4s cubic-bezier(.215, .610, .355, 1);
      background-color: #1890ff;
      border-top-left-radius: 0; 
      border-bottom-left-radius: 0; 
      margin-left: -10px;
      color: white;
    }
}

中间文章简介

获取数据

页面初始化加载

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  const [acticles, setArticles] = useState([]);
  // 这是umi中自定义Hooks 它也是在进入页面就发起请求。
   useRequest(
    async () =>
      await getArticle({}).then(res => {
        const { data } = res;
        setArticles(data);
      })
  );

我们上一篇文章的查询主要就是控制着文章简介的内容展示。所以也用到下面的方法。重新渲染文章简介的内容。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const searchAuthorOrTitle = (search = searchParams) => {
    getArticle(search).then(res => {
      const { data } = res;
      setArticles(data);
    });
  };

渲染数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   <div className={style.content}>
          {acticles.map((article, index) => (
            <div
              className={style.card}
              onClick={() => {
                goToDetail(article.id);
              }}
            >
              {/* 左上角三个点点的样式 */}
              <div className={style.icon}>
                <div className={style.circle} style={{ background: 'red' }} />
                <div className={style.circle} style={{ background: 'orange', marginLeft: '4px' }} />
                <div className={style.circle} style={{ background: 'green', marginLeft: '4px' }} />
              </div>
              {/* 主要内容 */}
              <div className={style.container}>
                {/* 文章封面 */}
                <div className={style.img_continer}>
                  <img src={article.cover} className={style.img} />
                </div>
                <div className={style.right}>
                  <div className={style.user}>
                    <GithubOutlined /> &amp;nbsp;
                    <span className={style.author}>{article.username}</span>
                  </div>
                  <div className={style.date}>
                    <CalendarOutlined className={style.date_icon} />
                    <span className={style.date}>{article.updatedAt}</span>
                  </div>
                  <div className={style.title}>{article.title}</div>
                  <div className={style.desc}>{article.desc}...</div>
                </div>
              </div>
            </div>
          ))}
        </div>

样式

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  .content {
    width: 45%;
    height: 2000px;
    float: left;
    margin-left: 26%;
    margin-top: 70px;
    clear: both;
    border-radius: 20px;

    .card {
      width: 100%;
      height: 240px;
      background-color: #fefefe;
      box-shadow: 0 1px 5px #888;
      margin-bottom: 10px;
      border-radius: 10px;

      .icon {
        width: 100%;
        height: 30px;
        display: flex;
        padding: 6px 0 0 8px;

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

      .container {
        width: 95%;
        margin: auto;
        // margin-top: 15px;
        // height: 200px;
        display: flex;

        .img_continer {
          width: 130px;
          height: 170px;

          .img {
            width: 130px;
            height: 170px;
            object-fit: fill; 
            object-fit: contain;
            object-fit: scale-down;
          }
        }

        .right {
          padding-left: 20px;
          margin-left: 20px;
          border-left: 1px solid #e9e6e6;
          width: calc(100%);
          background-color: #fefefe;
          height: 200px;
          padding-top: 10px;

          .user {
            width: 100%;
            font-weight: 400;
            font-size: 18px;
            line-height: 22px;

            .author {
              color: #86909c;
            }
           
          }

          .date_icon {
            font-weight: 400;
            font-size: 18px;
            margin-top: 10px;
            margin-right: 8px;
            color: #000;
          }

          .date {
            color: #86909c;
          }

          .title {
            width: 100%;
            margin-top: 20px;
            font-weight: 700;
            font-size: 16px;
            border-top: 1px dashed #888;
            padding-top: 10px;
          }

          .desc {
            margin-top: 5px;
            line-height: 25px;
            color: rgb(136, 132, 132);
          }
        }
      }
    }
  }

右侧

有一个日历组件,还没有达到我想要的效果。等我实现后,再单独发一篇文章。我们先看一下天气组件

天气组件

我们的服务端 调用的是高德地图的天气接口。接口返回的数据格式如下。怎么调用的高德接口请看另一篇文章koa调用高德地图

这里主要是图标的使用和数据的渲染了。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import React, { Fragment, useState, useEffect } from 'react';
import type { FC } from 'react';
import { Calendar } from 'antd';
import style from './index.less';
import { useRequest } from 'umi';
import { getCityCode } from './service';
import IconFont from '@/components/Icon';

/** 用到
 *  1. useRequest的使用  const {data,error,loading}  解构出 返回数据(需要有键data)、错误信息、加载中
 *  2. 图标的使用 type为iconfont的名称
 *  3. li 不带点
 *  4. 高德 IP获取地址接口 根据城市编码获取天气接口
 */
const Weather: FC<Record<string, any>> = () => {
  // 请求接口
  const { data, error, loading } = useRequest(async () => await getCityCode());

  return (
    <div className={style.container}>
      <div className={style.title}>
        <IconFont type="icontianqi" style={{ width: '25px', height: '25px' }} />
        <div>天气</div>
      </div>
      <div className={style.content}>
        <ul>
          <li>
            <IconFont type="iconchengshijianshe" className={style.icon} />
            {data?.lives[0].city}
          </li>
          <li>
            <IconFont type="icontianqi" className={style.icon} />
            {data?.lives[0].weather}
          </li>
          <li>
            <IconFont type="iconwenduji" className={style.icon} />
            {data?.lives[0].temperature}
          </li>
          <li>
            <IconFont type="iconfengxiangdai" className={style.icon} />
            {data?.lives[0].winddirection}
          </li>
          <li>
            <IconFont type="iconfengche" className={style.icon} />
            {data?.lives[0].windpower}
          </li>
        </ul>
      </div>
    </div>
  );
};
export default Weather;
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-02-23,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
借鉴QQ邮箱URL跳转页面
近期无意间看到林羽凡大佬的一篇博文《跳转页面》感觉挺有意思,联想到“QQ邮件里面的链接,打开会有安全提醒”灵光一闪,果断操作起来。可以先看看QQ邮箱页面跳转源代码(这里就不贴了,其实看不看都行!可以直接看正文源代码)
Dabenshi
2024/04/03
3280
借鉴QQ邮箱URL跳转页面
7b2美化-首页文章动态边框
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
小狐狸说事
2022/11/16
5430
7b2美化-首页文章动态边框
10个超酷的H5特效设计+1个仿最新苹果UI设计(压轴)
1.抽屉式(动态)选择 button(纯css实现) html代码:  <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="s
淼学派对
2022/11/20
1.5K0
10个超酷的H5特效设计+1个仿最新苹果UI设计(压轴)
小技巧,把Markdown文本发布到微信公众号文章
估计很多人都是这样,平常工作在github,等到有成果要发布,又要写微信公众号。 github用Markdown,微信公众号,至少截止今天,还是沿用富文本的方式。不是说富文本不好,但每次精心撰写的内容,重新排一遍版,还真是怪烦的。 如果在github是使用jekyll相对会容易一点,在页面上拷贝、到微信粘贴一下,大多内容都会差不多。否则就只好转换成html显示在浏览器,然后再拷贝粘贴。 Markdown转换成html大多人都会,有很多所见即所得的工具软件,比如Marked2,不过多数都是收费的。其
俺踏月色而来
2018/06/20
1.5K0
H5实现之登录模版的实现 原
html代码 <!DOCTYPE html> <html> <head> <link rel="stylesheet" href="css/login.css"> </head> <body> <
用户2603479
2018/08/15
2810
H5实现之登录模版的实现
                                                                            原
前端css实现最基本的时间轴
原型: 图片.png 代码: <!DOCTYPE html > <html> <head> <link rel="stylesheet" href="http://cdn.
王小婷
2018/06/01
1.9K0
React markdown发布文章后展示[1]
源码地址: https://gitee.com/yang-yiming1234/umi_blog
用户4793865
2023/02/03
5950
前端基础-CSS梅兰练习
四、梅兰练习 引入字体图标css和当前文件的css <link rel="stylesheet" type="text/css" href="font/iconfont.css"> <link rel="stylesheet" type="text/css" href="css/index.css"> 顶部代码: <!-- 顶部开始 --> <div class="top container"> <div class="content clearfix"> <div
cwl_java
2020/04/07
4690
前端基础-CSS梅兰练习
HTML+CSS+JS 实现登录注册界面[通俗易懂]
鉴于小伙伴们没有csdn积分,我把代码压缩成了一个压缩包,放在了gitee上面,需要的请点击下载 点击下载
全栈程序员站长
2022/09/13
26K0
HTML+CSS+JS 实现登录注册界面[通俗易懂]
计算机毕业设计:基于html制作大学生网上报到系统响应式模板项目源码
✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (1000套) 】 🧡 程序员有趣的告白方式:【💌HTML七夕情人节表白网页制作 (110套) 】 🌎超炫酷的Echarts大屏可视化源码:【🔰 echarts大屏展示大数据平台可视化(150套) 】 🎁 免费且实用的WEB前端学习指南: 【📂web前端零基础到高级学习视频教程 120G干货分享】 🥇 关于作者: 历任研发工程师,
IT司马青衫
2022/08/18
7100
计算机毕业设计:基于html制作大学生网上报到系统响应式模板项目源码
动物主题网页设计(小白必看)
✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (1000套) 】 🧡 程序员有趣的告白方式:【💌HTML七夕情人节表白网页制作 (110套) 】 🌎超炫酷的Echarts大屏可视化源码:【🔰 echarts大屏展示大数据平台可视化(150套) 】 🎁 免费且实用的WEB前端学习指南: 【📂web前端零基础到高级学习视频教程 120G干货分享】 🥇 关于作者:
IT司马青衫
2022/08/14
3700
动物主题网页设计(小白必看)
原生HTML+CSS+JS制作自己的导航主页(前端大作业,源码+步骤详解)
咕咕了好久啦,今天使用原生HTML+CSS+JS做一个很简单的个人定制的导航主页吧!
全栈程序员站长
2022/09/15
7.1K2
原生HTML+CSS+JS制作自己的导航主页(前端大作业,源码+步骤详解)
京东购物车网页(静态)搭建
二、项目环境 1、软件环境:Win10+HBuilder+Chrome浏览器 2、项目思路 : 根据需要实现的效果,自上而下,依次实现导航栏、搜索框、标题栏、商品详情展示框、结算窗口的编写。
时间静止不是简史
2020/07/24
2K0
京东购物车网页(静态)搭建
苏州园林景区网页设计 学生家乡网页设计作品静态HTML网页模板源码 DW大学生家乡主题网站制作 简单家乡介绍网页设计成品
家乡旅游景点网页作业制作 网页代码运用了DIV盒子的使用方法,如盒子的嵌套、浮动、margin、border、background等属性的使用,外部大盒子设定居中,内部左中右布局,下方横向浮动排列,大学学习的前端知识点和布局方式都有运用,CSS的代码量也很足、很细致,使用hover来完成过渡效果、鼠标滑过效果等,使用表格、表单补充模块,为方便新手学习页面中没有使用js有需要的可以自行添加。 --- @TOC 一、网页介绍📖 1 网页简介:此作品为学生个人主页网页设计题材,HTML+CSS 布局制作,we
IT司马青衫
2022/08/23
9490
苏州园林景区网页设计 学生家乡网页设计作品静态HTML网页模板源码 DW大学生家乡主题网站制作 简单家乡介绍网页设计成品
31·灵魂前端工程师养成-[项目]前端导航网站
-多年互联网运维工作经验,曾负责过大规模集群架构自动化运维管理工作。 -擅长Web集群架构与自动化运维,曾负责国内某大型金融公司运维工作。 -devops项目经理兼DBA。 -开发过一套自动化运维平台(功能如下): 1)整合了各个公有云API,自主创建云主机。 2)ELK自动化收集日志功能。 3)Saltstack自动化运维统一配置管理工具。 4)Git、Jenkins自动化代码上线及自动化测试平台。 5)堡垒机,连接Linux、Windows平台及日志审计。 6)SQL执行及审批流程。 7)慢查询日志分析web界面。
DriverZeng
2022/10/31
2.2K0
31·灵魂前端工程师养成-[项目]前端导航网站
php 生成订单号201807205598981
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/112386.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/08
7610
大一学生HTML个人网页作业作品——火影忍者动漫7页面带特效带轮播(HTML+CSS+JavaScript)
HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置,有div的样式格局,这个实例比较全面,有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 --- @TOC 一、网页介绍📖 1 网页简介:此作品为学生个人主页网页设计题材,HTML+CSS 布局制作,web前端期末大作业,大学生网页设计作业源码,这是一个不错的网页制作,画面精明,代码为简单学生水平, 非常适合初学者学习使用。 2.网页编辑:网页作品代码简单,可使用任意HTML
IT司马青衫
2022/08/14
1.2K0
大一学生HTML个人网页作业作品——火影忍者动漫7页面带特效带轮播(HTML+CSS+JavaScript)
BBS论坛(二)
2.1.cms后台登录界面完成 (1)templates/cms/cms_login.html <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <
zhang_derek
2019/02/13
4.2K0
BBS论坛(二)
WordPress网站B2主题会员展示模块
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
小狐狸说事
2022/11/17
1.1K0
WordPress网站B2主题会员展示模块
菜鸡博客开……开……开源了!
因为很多人找我要过博皮源码,所以本宝宝经过深思熟虑,最终决定把自己的源码分享给大家!
attack
2018/09/21
2.9K0
推荐阅读
相关推荐
借鉴QQ邮箱URL跳转页面
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验