我一直在测试与SunEditor,因为我想预加载存储在DB中的HTML文本,让用户修改它,如果必要的话。我从父传递一个ref变量,所以当提交按钮被点击,他可以得到值并保存修改。setContents只是有时工作。当我保存项目,并再次编译文本出现。但如果我使用应用程序或刷新窗口文本消失。我已经检查了变量仍然有值。我是第一次使用React,我不确定是我做错了还是suneditor-react失败了。你能帮助我吗?
下面是我的代码:
export const TranslationArea = React.forwardRef((props, ref) =>{
const handleEditorChange = (value) => {
console.log(value);
ref.current= value;
}
const handleClick = () => {
console.log(ref.current);
}
return(
<div>
<h2>{props.title}</h2>
<SunEditor
autoFocus={true}
width="100%"
height="150px"
setOptions={{
buttonList: [
// default
['undo', 'redo'],
['bold', 'underline', 'italic', 'list'],
['table', 'link', 'image'],
['fullScreen']
]
}}
setContents={props.content}
onChange={handleEditorChange}
/>
<div>{props.content}</div>
<button onClick={handleClick}>Content</button>
</div>
);
});
以下是SunEditor div中正确加载内容的屏幕截图(仅在编译项目时):
如果刷新页面或导航到同一链接...
我已经显示了一个具有相同props.content的div,只是为了检查fowardRef是否工作。为什么setContents现在工作了?我已经用React工具检查过了,并且加载了属性:
你知道吗?
2条答案
按热度按时间os8fio9y1#
我从parent传递了一个ref变量,这样当提交按钮被点击时,他就可以得到值并保存修改。
如果你只需要访问值,那么让我们传递一个回调函数,我们将它命名为
onSumbit
,它将是一个从SunEditor
组件中获取string
值的函数。为了访问当前编辑的值,我在
TranslationArea
组件中使用了一个本地状态,并通过编辑器的onChange
方法更新了该状态,然后当单击提交按钮时,我使用本地状态中的值content
调用onSubmit
(可能还有其他方法可以做到这一点,但我不熟悉SunEditor)。TranslationArea
组件如下所示:我在我的CodeSandbox中测试了它,给它一个
onSubmit
函数来记录提交的内容,但是您可以使用它做任何需要做的事情。CodeSandbox Link
njthzxwz2#
在SunEditor组件中:
在我的例子中,YOUR_PROPS_FROM_DB是状态来自父组件。占位符-里面的任何变量或字符串。当然这不是最好的解决方案。但不知何故它起作用了。
希望这对你有帮助!问候,