react + Ant Design + 支持 markdown 的 blog-react 项目的文档说明

简介: react + Ant Design + 支持 markdown 的 blog-react 项目的文档说明

前言


此 blog 项目是基于 react 全家桶 + Ant Design 的,项目已经开源,项目地址在 github 上。


1. 效果


效果图:


  • pc 端


微信图片_20220513102700.png


  • 移动端适配


微信图片_20220513102714.gif


完整效果请看:http://biaochenxuying.cn/main.html


2. 功能描述


2.1 已经实现功能


  • [x] 登录
  • [x] 注册
  • [x] 文章列表
  • [x] 标签分类
  • [x] 个人介绍
  • [x] 点赞与评论
  • [x] 留言
  • [x] 时间轴
  • [x] 发文(支持 MarkDown 语法)
  • [x] 文章详情展示(支持代码语法高亮)


2.2 待实现功能


  • [ ] 文章归档
  • [ ] 文章分类
  • [ ] 文章详情的目录
  • [ ] 移动端适配
  • [ ] 升级 webpack 版本到 4.X


3. 前端技术


3.1 主要技术


  • react: 16.5.2
  • antd: 3.9.3
  • react-router::4.3.1
  • webpack: 3.8.1
  • axios:0.18.0
  • redux: 4.0.0
  • highlight.js: 9.12.0
  • marked:0.5.1


4. 项目搭建



5. 主要项目结构


- components
  - article 文章详情
  - articles 文章列表
  - comments 评论
  - loadEnd 加载完成
  - loading 加载中
  - login 登录
  - message 留言
  - nav 导航
  - register 注册
  - slider 右边栏(博主 logo 、链接和标签等)
  - timeLine 时间轴
- router 路由
- store redux 的状态管理
- utils 封装的常用的方法
- views 框架页面


6. markdown 渲染


markdown 渲染效果图:


微信图片_20220513102817.png


react 相关的支持 markdown 语法的有 react-markdown,但不支持表格的渲染,所以没用。


markdown 渲染 采用了开源的 marked, 代码高亮用了 highlight.js 。


用法:


第一步:npm i marked highlight.js --save


npm i marked highlight.js --save


第二步: 导入


import marked from 'marked';
import hljs from 'highlight.js';


第三步: 设置


componentWillMount() {
        // marked相关配置
        marked.setOptions({
            renderer: new marked.Renderer(),
            gfm: true,
            tables: true,
            breaks: true,
            pedantic: false,
            sanitize: true,
            smartLists: true,
            smartypants: false,
            highlight: function(code) {
                return hljs.highlightAuto(code).value;
            },
        });
    }


第四步:


<div className="content">
    <div
        id="content"
        className="article-detail"
        dangerouslySetInnerHTML={{
              __html: this.state.articleDetail.content ? marked(this.state.articleDetail.content) : null,
            }}
        />
    </div>


第五步:引入 monokai_sublime 的 css 样式


<link href="http://cdn.bootcss.com/highlight.js/8.0/styles/monokai_sublime.min.css" rel="stylesheet">


第六步:对 markdown 样式的补充


如果不补充样式,是没有黑色背景的,字体大小等也会比较小,图片也不会居中显示


/*对 markdown 样式的补充*/
pre {
    display: block;
    padding: 10px;
    margin: 0 0 10px;
    font-size: 14px;
    line-height: 1.42857143;
    color: #abb2bf;
    background: #282c34;
    word-break: break-all;
    word-wrap: break-word;
    overflow: auto;
}
h1,h2,h3,h4,h5,h6{
    margin-top: 1em;
    /* margin-bottom: 1em; */
}
strong {
    font-weight: bold;
}
p > code:not([class]) {
    padding: 2px 4px;
    font-size: 90%;
    color: #c7254e;
    background-color: #f9f2f4;
    border-radius: 4px;
}
p img{
    /* 图片居中 */
    margin: 0 auto;
    display: flex;
}
#content {
    font-family: "Microsoft YaHei",  'sans-serif';
    font-size: 16px;
    line-height: 30px;
}
#content .desc ul,#content .desc ol {
    color: #333333;
    margin: 1.5em 0 0 25px;
}
#content .desc h1, #content .desc h2 {
    border-bottom: 1px solid #eee;
    padding-bottom: 10px;
}
#content .desc a {
    color: #009a61;
}


6. 主页的满屏 飘花洒落 的效果


微信图片_20220513103043.png


大家也看到了,主页的满屏动态 飘花洒落 的效果很棒吧,这效果我也是网上找的,是在单独的一个 main.html 文件上的,代码链接如下:

主页的满屏 飘花洒落 的效果


7. 注意点


7.1 打包的配置


因为项目是用了 react-app-rewired (一个对 create-react-app 进行自定义配置的社区解决方案) 来打包了,所以如果你想修改 webpack.config.dev.js 和 webpack.config.prod.js 的配置,打包后可能看不到想要的效果,因为 react-app-rewired 打包时,是根据根目录的 config-overrides.js 来进行打包,所以要修改 webpack 的配置的话,请修改 config-overrides.js 。


比如:关闭 sourceMap 和 支持装饰器


config.devtool = false; // 关闭 sourceMap 
config = injectBabelPlugin('babel-plugin-transform-decorators-legacy', config); // 支持装饰器


7.2 关于 页面


对于 关于 的页面,其实是一篇文章来的,根据文章类型 type 来决定的,数据库里面 type 为 3

的文章,只能有一篇就是 博主介绍 ;达到了想什么时候修改内容都可以。


所以当 this.props.location.pathname === '/about' 时就是请求类型为 博主介绍 的文章。


type: 3, // 文章类型: 1:普通文章;2:是博主简历;3 :是博主简介;


8. Build Setup ( 建立安装 )


# install dependencies
npm install 
# serve with hot reload at localhost: 3000
npm start 或者 yarn start
# build for production with minification
npm run build 或者 yarn run build


如果要看完整的效果,是要和后台项目 blog-node 一起运行才行的,不然接口请求会失败。


虽然引入了 mock 了,但是还没有时间做模拟数据,想看具体效果,请稳步到我的网站上查看 http://biaochenxuying.cn/main.html

相关文章
|
3月前
|
前端开发 JavaScript
React项目路由懒加载lazy、Suspense,使第一次打开项目页面变快
本文介绍了在React项目中实现路由懒加载的方法,使用React提供的`lazy`和`Suspense`来优化项目首次加载的速度。通过将路由组件改为懒加载的方式,可以显著减少初始包的大小,从而加快首次加载速度。文章还展示了如何使用`Suspense`组件包裹`Switch`来实现懒加载过程中的fallback效果,并提供了使用前后的加载时间对比,说明了懒加载对性能的提升作用。
254 2
React项目路由懒加载lazy、Suspense,使第一次打开项目页面变快
|
3月前
|
前端开发 JavaScript Java
SpringBoot项目部署打包好的React、Vue项目刷新报错404
本文讨论了在SpringBoot项目中部署React或Vue打包好的前端项目时,刷新页面导致404错误的问题,并提供了两种解决方案:一是在SpringBoot启动类中配置错误页面重定向到index.html,二是将前端路由改为hash模式以避免刷新问题。
310 1
|
1月前
|
前端开发 JavaScript
手敲Webpack 5:React + TypeScript项目脚手架搭建实践
手敲Webpack 5:React + TypeScript项目脚手架搭建实践
|
3月前
|
移动开发 前端开发
react项目配合diff实现文件对比差异功能
在React项目中,可以使用`diff`库实现文件内容对比差异功能。首先安装`diff`库,然后在组件中引入并使用`Diff.diffChars`或`Diff.diffLines`方法比较文本差异。通过循环遍历`diff`结果,可以生成不同样式的HTML元素来高亮显示文本差异。
159 1
react项目配合diff实现文件对比差异功能
|
3月前
|
前端开发 算法 JavaScript
React项目input输入框输入自动失去焦点
本文讨论了在React项目中如何处理input输入框自动失去焦点的问题,特别是在移动端开发中。文章提供了一个使用React Native的TouchableWithoutFeedback组件来监听点击事件,并在事件处理函数中通过调用Keyboard.dismiss()方法使输入框失去焦点的示例代码。这种方法可以确保在用户点击页面其他区域时,键盘能够收起,输入框失去焦点。
126 1
React项目input输入框输入自动失去焦点
|
3月前
|
JavaScript 前端开发 应用服务中间件
本地运行打包好的React、Vue项目
本文讨论了如何本地运行打包好的React和Vue项目,并解决了使用React-Router时Tomcat部署刷新页面导致404的问题,提出了将请求转回index.html的解决方案。
40 1
本地运行打包好的React、Vue项目
|
2月前
|
前端开发 JavaScript 应用服务中间件
linux安装nginx和前端部署vue项目(实际测试react项目也可以)
本文是一篇详细的教程,介绍了如何在Linux系统上安装和配置nginx,以及如何将打包好的前端项目(如Vue或React)上传和部署到服务器上,包括了常见的错误处理方法。
748 0
linux安装nginx和前端部署vue项目(实际测试react项目也可以)
|
3月前
|
资源调度 JavaScript 前端开发
使用vite+react+ts+Ant Design开发后台管理项目(二)
使用vite+react+ts+Ant Design开发后台管理项目(二)
|
3月前
|
缓存 前端开发 JavaScript
在react项目中实现按钮权限createContext && useContext
文章介绍了在React项目中如何使用`createContext`和`useContext`来实现按钮级别的权限控制。
80 0
|
2月前
|
Ubuntu Linux 测试技术
Linux系统之部署轻量级Markdown文本编辑器
【10月更文挑战第6天】Linux系统之部署轻量级Markdown文本编辑器
134 1
Linux系统之部署轻量级Markdown文本编辑器