reactjs - 富文本编辑器光标不会移动,使文本向后输入

标签 reactjs redux rte

我在 react 功能组件中有一个 RTE,由于某种原因,当输入文本时光标停止向前移动,导致文本向后输入。
现在,我已经知道问题出在哪里,但我没有解决方案。我确实找到了 this问题与他们通过添加 setContentFromString(nextProps.value) 解决的问题相同更新状态时,但出现以下错误

TypeError: react_rte__WEBPACK_IMPORTED_MODULE_5___default.a.setContentFromString is not a function
这是我的组件。
   export default props => {
        const { value, onChange, error, row, readOnly, className, ...rest } = props;
        const [internalValue, setInternalValue] = React.useState(
            value ? RichTextEditor.createValueFromString(unescape(value), 'html') : RichTextEditor.createEmptyValue()
        );
    
        React.useEffect(() => {
            setInternalValue(
                value ? RichTextEditor.createValueFromString(unescape(value), 'html') : RichTextEditor.createEmptyValue()
            );
        }, [value]);
    
        const classes = useStyles({ row });

// the problem area
        function change(value) {
            setInternalValue(value);
            if (onChange) {
                const trimmed = value.toString('markdown').trim();
                if (trimmed.length === 0 || (trimmed.length === 1 && trimmed.charCodeAt(0) === 8203)) {
                    onChange(null);
                } else onChange(escape(value.toString('html')));
            }
        }
    
        return (
            <RichTextEditor
                customStyleMap={customStyles}
                toolbarConfig={toolbarConfig}
                value={internalValue}
                onChange={change}
                readOnly={readOnly}
                toolbarClassName={classes.toolbar}
                editorClassName={clsx(readOnly ? null : classes.editor, error ? classes.error : null)}
                className={clsx(classes.root, className)}
                {...rest}
            />
        );
    };

最佳答案

internalValue被意外设置为随每次击键而变化的值,因此触发了 useEffect并最终将光标设置到位置 1。
通过使用 React.useRef我能够比较更改并使其正常工作。

关于reactjs - 富文本编辑器光标不会移动,使文本向后输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66330479/

相关文章:

javascript - 从 useReducer Hook 返回的状态是 "deep copy"还是 reducer 输出的引用?

javascript - Redux React-Native(在 react-redux 中使用 useSelector 与使用 connect 有什么区别?)

AEM Touch UI RTE 常用 rtePlugins 配置

javascript - Tinymce节点内容已更改

sitecore - 限制 `Insert Sitecore Link` RTE (Sitecore) 中的位置

javascript - 功能组件状态持久化

css - 将电子邮件消息呈现给 React 中的组件

javascript - 如何从集合中返回对象数组,以使用 meteor 进行 react ?

reactjs - typescript 错误 2304 : Cannot find name 'div' - CRA TypeScript Template

reactjs - 在react-redux中@connect装饰器有什么用