tldraw/packages
alex 2d2a7ea76f
Fix multiple editor instances issue (#4001)
React's strict mode runs effects twice on mount, but once it's done that
it'll go forward with the state from the first effect. For example, this
component:

```tsx
let nextId = 1
function Component() {
	const [state, setState] = useState(null)
	useEffect(() => {
		const id = nextId++
		console.log('set up', id)
		setState(id)
		return () => console.log('tear down', id)
	}, [])
	if (!state) return
	console.log('render', state)
}
```

Would log something like this when mounting for the first time:
- `set up 1`
- `tear down 1`
- `set up 2`
- `render 1`

For us, this is a problem: editor 2 is the version that's still running,
but editor 1 is getting used for render. React talks a bit about this
issue here: https://github.com/reactwg/react-18/discussions/19

The fix seems to be to keep the editor in a `useRef` instead of a
`useState`. We need the state to trigger re-renders though, so we sync
the ref into the state although we don't actually use the state value.

### Change Type


- [x] `sdk` — Changes the tldraw SDK
- [x] `bugfix` — Bug fix



### Release Notes

- Fix a bug causing text shape measurement to work incorrectly when
using react strict mode
2024-06-24 12:24:24 +00:00
..
assets Dynamic size mode + fill fill (#3835) 2024-06-16 16:58:13 +00:00
dotcom-shared Force interface instead of type for better docs (#3815) 2024-05-22 15:55:49 +00:00
editor Fix multiple editor instances issue (#4001) 2024-06-24 12:24:24 +00:00
namespaced-tldraw Update CHANGELOG.md [skip ci] 2024-06-11 12:53:15 +00:00
state image: follow-up fixes for LOD (#3934) 2024-06-14 10:01:50 +00:00
store Update license in readme of the store package (#3990) 2024-06-20 07:26:40 +00:00
tldraw Fix multiple editor instances issue (#4001) 2024-06-24 12:24:24 +00:00
tlschema Dynamic size mode + fill fill (#3835) 2024-06-16 16:58:13 +00:00
tlsync Dynamic size mode + fill fill (#3835) 2024-06-16 16:58:13 +00:00
utils lod: dont transform SVGs (#3972) 2024-06-18 12:57:44 +00:00
validate assets: store in indexedDB, not as base64 (#3836) 2024-06-14 10:23:52 +00:00