前面寫了一系列文章都是關於Next.js的,順便還搭建了個腳手架方便使用,反正目前來看可能用Next的人很少,也無所謂啦原本就是本身爲了學習纔開始寫文章的。以學代練,基礎知識已經準備的差很少了,開始應用了~我對掘金的新建文章編輯文章內容很是喜歡,正好前一段一直在弄文本編輯器相關內容,就寫一個仿掘金編輯器的Demo吧,你們感興趣的看一看,順便給個star我是很是感謝的~css
項目地址:next-markdown-editor前端
截圖:react
// 針對佈局單獨寫了一個editor-markdown.less,在全局引入了。
/asserts/editor-markdown.less
複製代碼
// SimpleMde.js
import { Component } from 'react';
import SimpleMDE from 'simplemde';
import marked from 'marked';
import hljs from 'highlight.js';
import 'simplemde/dist/simplemde.min.css';
import 'highlight.js/styles/github.css';
class SimpleMDEditor extends Component {
constructor(props) {
super(props);
this.state = { };
this.smde = null;
}
componentDidMount() {
// 編輯器內容點擊不彈文字
document.getElementById('markdownEditor')
.parentNode // 獲取編輯器container
.addEventListener('click', e => e.stopPropagation());
this.smde = new SimpleMDE({
element: document.getElementById('markdownEditor').childElementCount,
autofocus: true,
autosave: true,
initialValue: '',
indentWithTabs: false,
placeholder: '## 輸入試題內容...',
renderingConfig: {
singleLineBreaks: false,
codeSyntaxHighlighting: true,
},
insertTexts: {
horizontalRule: ["", "\n\n-----\n\n"],
image: ["![](http://", ")"],
link: ["[", "](http://)"],
table: ["", "\n\n| Column 1 | Column 2 | Column 3 |\n| -------- | -------- | -------- |\n| Text | Text | Text |\n\n"],
},
previewRender: function(plainText) {
return marked(plainText, {
renderer: new marked.Renderer(),
gfm: true,
pedantic: false,
sanitize: false,
tables: true,
breaks: true,
smartLists: true,
smartypants: true,
highlight: function (code) {
return hljs.highlightAuto(code).value;
}
});
},
spellChecker: false
});
SimpleMDE.toggleSideBySide(this.smde);
}
render() {
return (
<div id='editorContaienr'>
<textarea id='markdownEditor'></textarea>
</div>
);
}
}
export default SimpleMDEditor;
// index.js
const SimpleMDEditor = dynamic(import('./SimpleMde'), {
ssr: false
});
複製代碼
關於異步引入,能夠詳見Next.js官網異步引入組件文檔,寫得很詳細。git
項目長這個樣子:github
說實話,這個編輯器真心好用,你若是需求很是簡單,只要一個富文本編輯器,不要任何佈局之類的,直接引入就完事了,由於預覽,全屏的工做編輯器已經幫咱們作了,很是好用~數據庫
編輯器內容: 後端
這裏要說的就是,其實編輯器已經幫咱們作了全部能作的事,至於仿掘金編輯器頁面咱們作的就是初始化的時候將編輯器分邊展現便可,而後進行一下Layout佈局,作成掘金的樣子,我這裏就簡單的寫一下,至於底部的內容就不寫了,你們本身發揮想象吧,還挺簡單的~bash
頁面效果:markdown
是否是還挺有模有樣的,哈哈😄,頁面底部的頁腳內容我沒有繼續寫,container已經流出來了,感興趣的小夥伴自行發揮,關於Layout佈局詳情在項目的CSS裏,你們自行獲取,我就不貼代碼了~~~antd
一樣的,其實預覽內容也徹底可使用這個富文本編輯器,只須要進行簡單的預覽佈局就能夠~可是秉着學習新東西的理念,我就用
react-markdwon
作預覽吧。
使用react-markdown作預覽還真是有不少麻煩的地方,首先存在一些不兼容的地方,其次,react-markdown沒有任何的樣式,你須要本身對string -> markdwon以後的各類標籤添加相應的樣式才能夠~
實現效果:
陸續可能還會用這個腳手架搭建更多的應用Demo,目前只作前端Demo,可能後續還會有帶服務端內容的,由於前一個系列文章有小夥伴說想看先後端帶數據庫的完整項目,正在努力寫呢,不過工做之餘寫,時間可能不那麼充足,感興趣的能夠留言交流~😁
Next-Markdown-Editor ⭐️甩過來