当我们要实现一个PC端AI问答系统时,使用ant-design-x-vue组件库可以快速帮我们搭建起页面和实现一些基本功能:Bubble 对话气泡 | Ant Design X Vue

当我们需要在里面渲染一个自定义vue组件时,提供了一个回调函数钩子

但此时组件提供的打字机效果是没有的了,原因就是打字机效果实现的原理无非就是不断重复得渲染innerhtml这个字符串,而我们的自定义vue组件很难变成原生的html文本

messageRender: (content) => {
              console.log(content)
              
              return (
                <div
                  class="md-render"
                  style={{ textAlign: 'left' }}
                  v-html={md.render(content)}
                  onClick={clickUrl.bind(null, id)}
                ></div>
              )}

下面来讲讲渲染图表的同时保留打字机效果:

1.使用ssr等方式提前将图表渲染出来,用图片或者svg的形式直接返回原生dom字符串

2.延迟渲染:

将原本要渲染图表的地方先用一个空div占着空间,等到完整的innerhtml渲染完后,再根据标记的空div渲染图表或者自定义组件(web component)

onTypingComplete: () => {
              setTimeout(() => {
                finishInputRenderChart()
              }, 0)
            }

function finishInputRenderChart() {
        echartRenderArr.value
          .filter((val) => val.type == 'echart')
          .forEach((val) => {
            const foundElement = document.getElementById(`${val.key}`)
            if (foundElement) {
              if (!val.echartInstance) {
                val.echartInstance = echarts.init(foundElement)
              }
              console.log('val.content', val.content, val.echartInstance)
              val.echartInstance.setOption(val.content)
            }
          })
      }

如果不使用ant-design-x自己实现一个的话,可以考虑分段渲染,就不需要延迟到结束才渲染

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐