什麼是宣告式
- 理解宣告式之前,先說下 宣告 的含義,平時我們說 宣告一個變數,宣告一個函式,其本質是用一套語法去描述一個我們想要表達的物件
- 同理對於現代前端框架提供的
宣告式
程式設計,所指的並不是某一個變數或函式
,它所表示的是一種 程式設計模式,本質同樣是框架
提供了一套標準(如jsx
和 vue的模板語法
) 供開發者去描述UI
- 宣告式在前端應用的體現其實就是這樣一個 函式表示式:
UI = Fn(X)
,這裡 UI 範指 web頁面,Fn 則是我們編寫的宣告式元件,X 指狀態
例如這段 Vue 模板,我們通常就說它是宣告式的
<div id="app">
<button @click="count++">
Count is: {{ count }}
</button>
</div>
除此之外,你可能還聽說過 命令式
,直接看程式碼吧
// app.html
<div id="app">
<button></button>
</div>
// app.js
let count = 0;
const btnElement = document.querySelector('#app button');
btnElement.textContent = `Count is: ${count}`
btnElement.addEventListener('click', () => {
count++;
btnElement.textContent = `Count is: ${count}`
});
把 宣告式 和 命令式 對比起來看,你會發現 命令式 的語句通常是原生語句
,而 宣告式 都依賴於框架提供的特性。其實說白了,宣告式 的程式碼 經過編譯/框架執行時
解釋後,也就是一句一句的 命令式 的程式碼了。
由此可以有一個簡單的結論:宣告式程式設計本身是一種理念,一種思想,而宣告式的語法 往往是 某個框架 對 命令式 邏輯的上層抽象,以簡潔的 語法 來表達原本繁瑣的邏輯。
什麼是狀態
嚴格來說,狀態 和 變數不是完全等價的,狀態是變數的一個子集。通常我們把一個具備 可互動性 的變數稱之為狀態,什麼叫 可互動性,看一個例子
如下邏輯中,count
沒有參與頁面互動,僅僅是記憶體中的一個值,對於使用者來說是無感的,通常我們不會稱之為狀態
let count = 0;
for(let i = 0; i < 10; i++) {
count =+ 1;
}
但如果改寫成這樣,count 將渲染到頁面上,並且按鈕點選會遞增其值,並重新渲染,這時 count 參與到了與使用者的互動過程中,具備了可互動性,通常就可以稱為 狀態
let count = 0;
const btnElement = document.querySelector('#app button');
btnElement.textContent = `Count is: ${count}`
btnElement.addEventListener('click', () => {
count++;
btnElement.textContent = `Count is: ${count}`
});
對於 狀態
的解釋不僅限於以上的示例,比如平常業務開發中,決定一個 modal 是否顯示的 變數visible 我們也會稱為 狀態,因為 visible 的變化會引起檢視變更
,此類參與 互動 但不會直接渲染到檢視上的 變數,也屬於此範疇。