方法

组件通过 ref 暴露的方法,用于控制打字动画。

DsMarkdown 方法

start()

开始打字动画,手动触发动画开始。

const ref = useRef(null);
 
<button onClick={() => ref.current?.start()}>开始</button>
<DsMarkdown ref={ref} autoStartTyping={false}>
  内容...
</DsMarkdown>

stop()

暂停打字动画,可在打字过程中调用。

<button onClick={() => ref.current?.stop()}>暂停</button>

resume()

恢复打字动画,与 stop() 配合使用。

<button onClick={() => ref.current?.resume()}>继续</button>

restart()

重新开始打字动画,从头开始播放当前内容。

<button onClick={() => ref.current?.restart()}>重启</button>

MarkdownCMD 方法

push(content, answerType?)

添加内容并开始打字,支持流式数据。

const ref = useRef(null);
 
// 添加内容
ref.current?.push('# 新标题\n\n这是新内容');
 
// 指定类型
ref.current?.push('思考内容...', 'thinking');
ref.current?.push('回答内容...', 'answer');

clear()

清空所有内容和状态,重置组件。

ref.current?.clear();

triggerWholeEnd()

手动触发完成回调。

ref.current?.triggerWholeEnd();

start()

开始打字动画,手动触发动画开始。

ref.current?.start();

stop()

暂停打字动画。

ref.current?.stop();

resume()

恢复打字动画。

ref.current?.resume();

restart()

重新开始打字动画。

ref.current?.restart();

完整示例

import { useRef } from 'react';
import { MarkdownCMD } from 'ds-markdown';
 
function App() {
  const ref = useRef(null);
 
  const handleStream = (chunk: string) => {
    ref.current?.push(chunk);
  };
 
  return (
    <div>
      <div>
        <button onClick={() => ref.current?.start()}>开始</button>
        <button onClick={() => ref.current?.stop()}>暂停</button>
        <button onClick={() => ref.current?.resume()}>继续</button>
        <button onClick={() => ref.current?.restart()}>重启</button>
        <button onClick={() => ref.current?.clear()}>清空</button>
      </div>
      
      <MarkdownCMD 
        ref={ref}
        interval={20}
        showCursor
        cursor="line"
      />
    </div>
  );
}