1- import { useState , useEffect , useLayoutEffect , useRef } from "react"
1+ import {
2+ useState ,
3+ useEffect ,
4+ useLayoutEffect ,
5+ useRef ,
6+ useEffectEvent ,
7+ } from "react"
28import * as monaco from "monaco-editor"
39import { LintError , Fix , useDumpCst , useDumpTokens , useErrors } from "./squawk"
410import {
@@ -233,22 +239,18 @@ function Editor({
233239 settings : monaco . editor . IStandaloneEditorConstructionOptions
234240 markers ?: Marker [ ]
235241} ) {
236- const onChangeRef = useRef < ( ( _ : string ) => void ) | undefined > ( null )
237- const onSaveRef = useRef < ( ( _ : string ) => void ) | undefined > ( null )
242+ const onChangeText = useEffectEvent ( ( text : string ) => {
243+ onChange ?.( text )
244+ } )
245+ const onSaveText = useEffectEvent ( ( text : string ) => {
246+ onSave ?.( text )
247+ } )
238248 const divRef = useRef < HTMLDivElement > ( null )
239249 const autoFocusRef = useRef ( autoFocus )
240250 const settingsInitial = useRef ( settings )
241251 const editorRef = useRef < monaco . editor . IStandaloneCodeEditor > ( null )
242252 const fixesRef = useRef < Map < string , Fix > > ( new Map ( ) )
243253
244- // TODO: replace with useEventEffect
245- useEffect ( ( ) => {
246- onChangeRef . current = onChange
247- } , [ onChange ] )
248- useEffect ( ( ) => {
249- onSaveRef . current = onSave
250- } , [ onSave ] )
251-
252254 useEffect ( ( ) => {
253255 if ( markers == null ) {
254256 return
@@ -275,10 +277,10 @@ function Editor({
275277 settingsInitial . current ,
276278 )
277279 editor . addCommand ( monaco . KeyMod . CtrlCmd | monaco . KeyCode . KeyS , ( ) =>
278- onSaveRef . current ?. ( editor . getValue ( ) ) ,
280+ onSaveText ( editor . getValue ( ) ) ,
279281 )
280282 editor . onDidBlurEditorText ( ( ) => {
281- onSaveRef . current ?. ( editor . getValue ( ) )
283+ onSaveText ( editor . getValue ( ) )
282284 } )
283285 monaco . languages . register ( { id : "rast" } )
284286 const tokenProvider = monaco . languages . setMonarchTokensProvider ( "rast" , {
@@ -346,7 +348,7 @@ function Editor({
346348 )
347349
348350 editor . onDidChangeModelContent ( ( ) => {
349- onChangeRef . current ?. ( editor . getValue ( ) )
351+ onChangeText ( editor . getValue ( ) )
350352 } )
351353 if ( autoFocusRef . current ) {
352354 editor . focus ( )
0 commit comments