Skip to content

Commit 1058256

Browse files
committed
refactor: use composition instead of options api
1 parent 74e562f commit 1058256

File tree

4 files changed

+30
-49
lines changed

4 files changed

+30
-49
lines changed

dist/VueMarkdown.d.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Component } from 'vue';
2-
export type { Options } from 'markdown-it';
1+
import { Component } from "vue";
2+
export type { Options } from "markdown-it";
33
declare const VueMarkdown: Component;
44
export default VueMarkdown;

dist/VueMarkdown.js

Lines changed: 9 additions & 22 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/VueMarkdown.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/VueMarkdown.ts

Lines changed: 18 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
1-
import { h, PropType, VNode, Component, defineComponent } from 'vue'
2-
import MarkdownIt, { Options as MarkdownItOptions, PluginSimple } from 'markdown-it'
3-
export type { Options } from 'markdown-it'
1+
import MarkdownIt, {
2+
Options as MarkdownItOptions,
3+
PluginSimple,
4+
} from "markdown-it";
5+
import { Component, PropType, computed, defineComponent, h, ref } from "vue";
6+
export type { Options } from "markdown-it";
47

58
const VueMarkdown: Component = defineComponent({
6-
name: 'VueMarkdown',
9+
name: "VueMarkdown",
710
props: {
811
source: {
912
type: String,
@@ -16,28 +19,19 @@ const VueMarkdown: Component = defineComponent({
1619
plugins: {
1720
type: Array as PropType<PluginSimple[]>,
1821
required: false,
19-
}
20-
},
21-
data() {
22-
return {
23-
md: null as MarkdownIt | null,
24-
}
25-
},
26-
computed: {
27-
content(): string | undefined {
28-
const src = this.source
29-
return this.md?.render(src)
3022
},
3123
},
32-
created() {
33-
this.md = new MarkdownIt(this.options ?? {})
34-
for (const plugin of this.plugins ?? []) {
35-
this.md.use(plugin)
24+
setup(props) {
25+
const md = ref<MarkdownIt>(new MarkdownIt(props.options ?? {}));
26+
27+
for (const plugin of props.plugins ?? []) {
28+
md.value.use(plugin);
3629
}
30+
31+
const content = computed(() => md.value.render(props.source));
32+
33+
return () => h("div", { innerHTML: content.value });
3734
},
38-
render(): VNode {
39-
return h('div', { innerHTML: this.content })
40-
},
41-
})
35+
});
4236

43-
export default VueMarkdown
37+
export default VueMarkdown;

0 commit comments

Comments
 (0)