Я пытаюсь выполнить базовое воспроизведение событий в Monaco Editor, однако всякий раз, когда я передаю редактирование в executeEdits
, оно всегда сбрасывает range
моего редактирования в { startLineNumber: 1, startColumn: 1, endLineNumber: 1, endColumn: 1 }
(это то, что я получаюесли я console.log
сообщение после вызов executeEdits
).По сути, любой текст, который я пытаюсь вставить или заменить, всегда заканчивается в начале первой строки и фактически вводит текст в обратном порядке.
import * as React from 'react'
import * as monaco from 'monaco-editor'
import { PlayerContext } from './player-context'
const defaultOptions = {
minimap: {
enabled: false
}
}
export default class MonacoEditor extends React.Component {
static contextType = PlayerContext
handleMessage = message => {
this._editor.executeEdits('', [
{ ...message, forceMoveMarkers: true }
])
}
componentDidMount() {
const { path, value, language, ...options } = this.props
const model = monaco.editor.createModel(value, language, path)
this._editor = monaco.editor.create(this._node, {
...defaultOptions,
...options
})
this._editor.setModel(model)
this.context.addMessageHandler('didChange', this.handleMessage)
}
componentWillUnmount() {
this._editor && this._editor.dispose()
this.context.removeMessageHandler('didChange', this.handleMessage)
}
render() {
return <div style={{ height: 500 }} ref={c => (this._node = c)} />
}
}
Я использую реагирование для рендеринга редактора Monaco, как показано выше.Контекст предоставляет объект, который в основном позволяет мне подписываться на события воспроизведения, объект message
, переданный в handleMessage
, имеет форму IIdentifiedSingleEditOperation
{
range: {
startLineNumber: 0,
startColumn: 47,
endLineNumber: 0,
endColumn: 47
},
text: '!'
}
Почему Монако сбрасываетсямой диапазон операций редактирования?