You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从localStorage读取Markdown响应式渲染,避免marked抛错?

解决方案

核心问题修复:避免marked接收空值

你出现报错的根本原因是或运算符的兜底逻辑写在了marked执行之后,此时如果localStorage.content为undefined,marked已经执行抛出错误,兜底逻辑根本不会生效。你只需要把兜底逻辑提前到入参阶段即可:

<template>
  <div class="about-info">
    <div class="text-container">
      <div v-html="state.content"></div>
    </div>
  </div>
</template>

<script setup>
import {reactive} from "vue";
import DOMPurify from "dompurify";
import marked from "marked";

const state = reactive({
    // 提前对入参做空值兜底,保证传给marked的永远是字符串类型
    content: DOMPurify(marked(localStorage.content ?? ''))
})
</script>

这里用空值合并运算符??比||更稳妥,只会在值为undefined/null时兜底为空字符串,不会误处理''、0这类合法假值。


模板调用渲染函数源码问题修复

你在模板内直接调用DOMPurify和marked出现函数源码的原因是:<script setup>语法糖下,导入的第三方依赖默认不会暴露到模板作用域,模板无法识别这两个变量为可执行函数,就会将其转为字符串输出。
如果想要在模板层处理markdown解析,可以把解析逻辑封装为组件内的公共方法:

<template>
  <div class="about-info">
    <div class="text-container">
      <div v-html="parseMarkdown(localStorage.content)"></div>
    </div>
  </div>
</template>

<script setup>
import DOMPurify from "dompurify";
import marked from "marked";

// 封装为组件内方法,模板可直接调用
const parseMarkdown = (rawMd) => {
  if (!rawMd) return ''
  return DOMPurify(marked(rawMd))
}
</script>

这种写法不需要额外声明响应式状态,原始markdown更新时会自动重新解析渲染。


内容的提问来源于stack exchange,提问作者Artur Müller Romanov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 06:57:00