reactjs - 使用 React Hooks 的 SlateJS 工具栏
问题描述
我正在尝试使用 React Hooks 在 slate 上设置工具栏。好像出了什么问题,我不知道是什么。这是我的代码:
const renderMark = (props, editor, next) => {
const { children, mark, attributes } = props
switch (mark.type) {
case "bold":
return <strong {...attributes}>{children}</strong>
case "italic":
return <i {...attributes}>{children}</i>
case "underline":
return <u {...attributes}>{children}</u>
default:
return next()
}
}
const onClickMark = (event, type, editor) => {
event.preventDefault()
editor.toggleMark(type)
}
<>
<Toolbar>
<Button onPointerDown={event => onClickMark(event, "bold")}>
<BoldIcon />
</Button>
<Button onPointerDown={event => onClickMark(event, "italic")}>
<ItalicIcon />
</Button>
<Button onPointerDown={event => onClickMark(event, "underline")}>
<UnderlineIcon />
</Button>
</Toolbar>
<Editor
onChange={handleChange}
onKeyDown={onKeyDown}
renderMark={renderMark}
renderNode={renderNode}
value={value}
/>
</>
知道为什么这不起作用吗?
解决方案
问题是我需要将工具栏绑定到编辑器。我useRef
按如下方式使用钩子做到了这一点。
const editorRef = useRef()
const onClickMark = (event, type, editorRef) => {
event.preventDefault()
editorRef.current.toggleMark(type)
}
return (
<>
<Toolbar>
<Button onPointerDown={event => onClickMark(event, "bold", editorRef)}>
<BoldIcon />
</Button>
...
</Toolbar>
<StyledEditor
...
ref={editorRef}
...
/>
</>
推荐阅读
- java - 如何在 intelij 中打开多个文件名匹配模式的文件
- c++ - 为什么我想在一个函数中锁定两个互斥锁 - 延迟锁定也是如此?
- nlp - 确保编码器-解码器文本生成深度学习模型中存在单词/标记/名词
- r - 在临时目录中读/写时出错(在 R-studio 中使用 arulesSequences)
- vue.js - b卡标题中的数据绑定
- javascript - 仅具有特定字段的数组解构+扩展语法?
- python - 从表单输入中删除特定字母
- angularjs - Angular返回未定义的值
- c# - 比较两个字符串数组并返回相同的值
- python - Python:FQDN 像 `hostname --fqdn`?