предисловие
Поле редактирования форматированного текста, которое я использовал ранее, имеет очень беспорядочный формат: макет написанной статьи нелегко увидеть, а подсветка кода не была найдена подходящей. Поэтому я думал об изменении форматированного текста на уценку.
Выбор плагина
Нам нужно писать статьи и читать статьи, поэтому у нас должны быть плагины редактора уценки и плагины рендеринга уценки. На github есть много плагинов, в конце концов я остановился на одном:for-editorа такжеreact-markdown, первый для записи, а второй для загрузки.
После выбора плагина начнем использовать его в нашем проекте!
установка и использование для редактора
Установить
npm install for-editor --save
использовать
код показывает, как показано ниже:
import React from 'react'
import Editor from 'for-editor'
class WriteBlog extends React.Component{
constructor(props){
super(props)
this.state = {
editorValue:'',
imageUrl:''
}
}
handleChange(value){
this.setState({
editorValue:value
})
}
uploadHandler(params){
fetch.get('getQiniuToken',{
token:JSON.parse(Cookies.get('loginInfo')).token
}).then(res=>{
utils.uploadFile(params,res.data.qiniuToken).then(res=>{
this.setState({
imageUrl:'http://img.xuweijin.com/'+res
})
let str = this.state.editorValue + '![alt](http://img.xuweijin.com/'+res+')'
this.setState({
editorValue:str
})
})
})
}
render(){
return(
<Editor className="my-editor"
subfield = {true}
preview = {true}
addImg = {(file) => this.uploadHandler(file)}
value={this.state.editorValue} onChange={(value) => this.handleChange(value)} />
)
}
Для загрузки изображения не используется официальный метод. После успешной загрузки добавьте строку изображения в редактор вручную.
Вышеупомянутое просто вставка некоторых кодов, пожалуйста, перейдите непосредственно к конкретным параметрамдомашняя страница github для редакторовПроверить.
Как установить и использовать реакцию-уценку
Установить
npm install --save react-markdown
использовать
код показывает, как показано ниже:
import React from 'react'
import ReactMarkdown from 'react-markdown'
class BlogDetail extends React.Component{
constructor(props){
super(props)
this.state = {
articleDetail:'',
}
}
render(){
return(
<ReactMarkdown source={this.state.articleDetail.article_content}
escapeHtml={false}></ReactMarkdown>
)
}
}
Приведенный выше код представляет собой простую вставку кода. Чтобы узнать о конкретных параметрах конфигурации, перейдите на страницудомашняя страница github react-markdownПроверить.
Выше приведено решение уценки текста, но это не конец, мы должны добавить подсветку кода при разборе, иначе при наличии кода в нашей статье читабельность будет крайне плохой.
подсветка кода
Установите пакет плагина для подсветки кода
Мой выбор здесь — _react-syntax-highlighter_
npm install react-syntax-highlighter --save
использовать
- Сначала создайте новый файл CodeBlock.jsx, код выглядит следующим образом
import React, { PureComponent } from "react";
import PropTypes from "prop-types";
import { PrismLight as SyntaxHighlighter } from "react-syntax-highlighter";
// 设置高亮样式
import { xonokai } from "react-syntax-highlighter/dist/esm/styles/prism";
// 设置高亮的语言
import { jsx, javascript, sass, scss } from "react-syntax-highlighter/dist/esm/languages/prism";
class CodeBlock extends PureComponent {
static propTypes = {
value: PropTypes.string.isRequired,
language: PropTypes.string
};
static defaultProps = {
language: null
};
componentWillMount() {
// 注册要高亮的语法,
// 注意:如果不设置打包后供第三方使用是不起作用的
SyntaxHighlighter.registerLanguage("jsx", jsx);
SyntaxHighlighter.registerLanguage("javascript", javascript);
SyntaxHighlighter.registerLanguage("js", javascript);
}
render() {
const { language, value } = this.props;
return (
<figure className="highlight">
<SyntaxHighlighter language={language} style={xonokai}>
{value}
</SyntaxHighlighter>
</figure>
);
}
}
export default CodeBlock;
- используется при разборе
Согласно методу, предоставленному react-markdown, при разборе файла md мы обрабатываем тег кода, добавляем выделенное имя класса стиля и просто вставляем код:
import CodeBlock from '../components/CodeBlock'
class BlogDetail extends React.Component{
constructor(props){
super(props)
this.state = {
articleDetail:'',
}
}
render(){
return(
<ReactMarkdown source={this.state.articleDetail.article_content}
renderers={{
code: CodeBlock
}}
escapeHtml={false}></ReactMarkdown>
)
}
}
Таким образом, мы видим, что при разборе статьи выделенный стиль появится в части кода.
Каталог статей
Когда наша статья слишком длинная, нам нужно добавить каталог статей, чтобы читатели имели обзор всего, а также читателям было удобно быстро переключаться на ту часть, которую они хотят знать, подобно самородкам.
Через гитхаб наконец-то нашелmarkdown-navbarЭтот плагин хоть и не имеет большого количества звездочек, но все равно очень удобен в использовании.
установка markdown-navbar
npm install markdown-navbar --save
использовать
Этот плагин очень удобен в использовании, вам нужно только ввести этот плагин в проект, а затем передать md файл, который необходимо разобрать, и дерево каталогов будет сгенерировано автоматически. Как правило, дерево каталогов должно быть исправлено, поэтому я использовал здесь компонент Anchor antd, чтобы исправить каталог с правой стороны.Код выглядит следующим образом:
import { Anchor } from 'antd';
import MarkNav from 'markdown-navbar';
import 'markdown-navbar/dist/navbar.css';
class BlogDetail extends React.Component{
constructor(props){
super(props)
this.state = {
articleDetail:'',
}
}
render(){
return(
<Anchor>
<div className="markNav-title">文章目录</div>
<MarkNav
className="article-menu"
source={this.state.articleDetail.article_content}
headingTopOffset={80}
/>
</Anchor>
)
}
}
Вот простая вставка кода, перейдите к конкретной конфигурациидомашняя страница уценки githubУбедитесь сами.
В заключение
Выше приведено общее решение для редактирования и рендеринга синтаксиса уценки реакции. Вставьте визуализированное изображение статьи:
Вы можете видеть, что визуализированный стиль довольно аккуратный, и все готово!
Я впервые пишу такой небольшой роман, который в основном представляет собой текущий отчет. Большое спасибо за то, что смогли увидеть конец. Наконец, вы можете прийти ко мне.Домашняя страницавзаимодействие с сообщением~