Svelte是個基於Javascript的前端開發框架,跟React不同的是,Svelte的語法跟純javascript比較類似,對於懂html、CSS、Javascript的開發者來說,較容易上手。利用「{}」存取javascript裡的變數,來避免複雜的DOM操作。例如:

<script>
	let name = 'world';
</script>
<h1>Hello {name}!</h1>

因為標準的HTML語法中是不能直接取得javascript裡的變數,必須在javascript裡利用document.getElementById()處理,因為需要取得id,所以,語法就變複雜了,相對的寫法:

<!DOCTYPE html>
<html>
  <body>
  <h1>Hello **<span id="name"></span>**!</p> 
  </body>
  <script>
    let name = 'world';
    **document.getElementById("name").innerHTML = name;**
  </script>
</html>

事實上,svelte是透過編譯去產生完整的javascript (不是夾帶html的javascript),並透過javascipt去產生html,如下:

/* App.svelte generated by Svelte v3.55.1 */
import {
	SvelteComponent,
	detach,
	element,
	init,
	insert,
	noop,
	safe_not_equal
} from "svelte/internal";

function create_fragment(ctx) {
	let h1;

	return {
		c() {
			h1 = element("h1");
			h1.textContent = `Hello ${name}!`;
		},
		m(target, anchor) {
			insert(target, h1, anchor);
		},
		p: noop,
		i: noop,
		o: noop,
		d(detaching) {
			if (detaching) detach(h1);
		}
	};
}

let name = 'world';

class App extends SvelteComponent {
	constructor(options) {
		super();
		init(this, options, null, create_fragment, safe_not_equal, {});
	}
}

export default App;

svelte官方網頁:

next是基於react的框架,svelte的對應框架是svelte kit,Svelte Kit目前還是1.0版,雖然只是1.0版,但是提供的功能與next差距不大。svelte kit官方網頁:

設定與檔案結構

元件

Firebase

Svelte Material-UI

範例