HMR / Fast Refresh caveats in popular JavaScript UI frameworks

General

🔴 DON’T

// main.jsx
const App = () => <></>

render(<App />)

🟢 DO

// main.jsx
import App from './app'

render(<App />)

// app.jsx
const App = () => <></>

export default App

🔴 DON’T

export default () => <></>

// Or
export default function () {
  return <></>
}

🟢 DO

const App = () => <></>

export default App

// Or
export default function App() {
  return <></>
}

Frameworks

React - Fast Refresh

Preact - Prefresh

Solid - Solid Refresh

solidjs/solid-refresh#12 Feature: HMR support

// app.jsx
// @refresh granular
import Component from './component'

const AnotherComponent = () => <></> // [2]

const App = () => (
	<>
		<Component />
		<AnotherComponent />
    Text {/* [3] */}
	</>
)

// component.jsx
const Component = () => <></> // [1]

export default Component

Svelte - svelte-hmr

<!-- app.svelte -->
<script>
	import Component from './component.svelte'
</script>

<div>
	<Component/>
	Text <!-- [2] -->
</div>

<!-- component.svelte -->
<div></div> <!-- [1] -->

Vue