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

如何实现Slate编辑器内存在指定关键词时关键词列表对应词变色

实现方案

1. 提取Slate编辑器纯文本内容

Slate返回的内容为嵌套节点数组,无法直接用于关键词匹配,可通过Slate内置工具方法提取全部文本为纯字符串:

import { Node } from 'slate'

// 入参为Slate的value节点数组
const getEditorPlainText = (nodes) => {
  return nodes.map(node => Node.string(node)).join('')
}

注:如果需要保留换行符做匹配,可将拼接符改为\n

2. 同步更新关键词匹配状态

在编辑器内容变更的回调中,实时匹配预定义关键词是否出现在编辑器内容中,存储为Set结构方便后续快速查询:

import { useState, useCallback } from 'react'

// 你的预定义关键词数组
const PREDEFINED_KEYWORDS = ['产品', '运营', '技术', '设计']

const App = () => {
  const [editorValue, setEditorValue] = useState([])
  const [usedKeywords, setUsedKeywords] = useState(new Set())

  const handleEditorChange = useCallback((newVal) => {
    setEditorValue(newVal)
    const plainText = getEditorPlainText(newVal)
    const matchedSet = new Set()
    // 遍历所有预定义关键词匹配是否已出现
    PREDEFINED_KEYWORDS.forEach(keyword => {
      // 如需全词匹配、大小写不敏感匹配,可修改此处判断逻辑
      if (plainText.includes(keyword)) {
        matchedSet.add(keyword)
      }
    })
    setUsedKeywords(matchedSet)
  }, [])

  // 其余逻辑省略
}

3. 动态绑定关键词样式

渲染待使用关键词列表时,根据匹配状态动态设置字体颜色即可:

<div className="keyword-area">
  {PREDEFINED_KEYWORDS.map(keyword => (
    <div 
      key={keyword}
      style={{
        color: usedKeywords.has(keyword) ? '#1677ff' : '#333'
      }}
    >
      {keyword}
    </div>
  ))}
</div>

内容的提问来源于stack exchange,提问作者Avinash Toppo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 07:06:03