Я думаю, что проблема, с которой вы сталкиваетесь, заключается в том, что вы отправляете пакет операций, которые не должны применяться одна за другой.
A split_node
операция, подобная той, которую вы генерируете, нажимая enter
, будет фактически разделить все вложенные узлы, пока не достигнет листьев, и переместить некоторые узлы вокруг.
Конкретно, split_node - это фактически 2-3 операции, следующие друг за другом, которые не могут применяться исключительно. Например, если вы примените первый, это разделит текстовый узел и в итоге получит два Text
с одинаковыми атрибутами. Slate нормализует их и повторно объединит их, как только сможет, что в вашем случае происходит между каждым editor.apply(op)
.
Я думаю, что решение здесь состоит в том, чтобы просто обернуть все ваши l oop внутрь метод withoutNormalizing
. Это позволит Slate нормализовать документ между операциями.
Для Slate <= 0,47 </h3> editor.withoutNormalizing(() => {
JSON.parse(ops).forEach(op => {
editor.apply(op);
});
})
Для Slate> = 0,5
Editor.withoutNormalizing(editor, () => {
JSON.parse(ops).forEach(op => {
editor.apply(op);
});
})