preact組件案例的使用詳解
制作一個(gè)下拉框
export function SelectValue({value, setfn, options, disabled}) { const toInt = x => x == parseInt(x) ? parseInt(x) : x; const onchange = ev => setfn(toInt(ev.target.value)); return html` <select onchange=${onchange} class="w-full rounded font-normal border py-0.5 px-1 text-gray-600 focus:outline-none text-sm disabled:cursor-not-allowed" disabled=${disabled}> ${options.map(v => html`<option value=${v[0]} selected=${v[0] == value}>${v[1]}<//>`) } <//>`; };
這段 Preact 組件代碼定義了一個(gè)名為 SelectValue 的函數(shù)組件,用于創(chuàng)建一個(gè)下拉選擇框。 讓我們分解一下它的功能:
組件功能:
- SelectValue 組件接收以下 props (屬性):
- value: 當(dāng)前選中的值。
- setfn: 一個(gè)函數(shù),用于更新父組件中的 value。當(dāng)下拉選擇框的值發(fā)生改變時(shí),會(huì)調(diào)用這個(gè)函數(shù)。
- options: 一個(gè)數(shù)組,包含了下拉選擇框的選項(xiàng)。每個(gè)選項(xiàng)都是一個(gè)包含兩個(gè)元素的數(shù)組:[value, label],其中 value 是選項(xiàng)的值,label 是選項(xiàng)顯示的文本。
- disabled: 一個(gè)布爾值,指示下拉選擇框是否禁用。
代碼分解:
1.export function SelectValue({value, setfn, options, disabled}) { ... }:
定義了一個(gè)名為 SelectValue 的函數(shù)組件,并使用了解構(gòu)賦值來(lái)獲取傳入的 props。
export 關(guān)鍵字表示該組件可以被其他模塊導(dǎo)入和使用。
2.const toInt = x => x == parseInt(x) ? parseInt(x) : x;:
定義了一個(gè)名為 toInt 的箭頭函數(shù)。
這個(gè)函數(shù)的作用是將傳入的值 x 轉(zhuǎn)換為整數(shù),如果 x 本身就是一個(gè)整數(shù)。如果 x 不是整數(shù),則保持原樣。
x == parseInt(x) 用于判斷 x 是否可以安全地轉(zhuǎn)換為整數(shù)而不丟失信息。 例如,"1" == parseInt("1") 為真,而 "1.5" == parseInt("1.5") 為假。
這個(gè)函數(shù)用于確保 setfn 接收到的值是整數(shù),如果選項(xiàng)的值是整數(shù)的話。
3.const onchange = ev => setfn(toInt(ev.target.value));:
定義了一個(gè)名為 onchange 的箭頭函數(shù),它將作為 <select> 元素的 onchange 事件處理函數(shù)。
當(dāng)下拉選擇框的值發(fā)生改變時(shí),這個(gè)函數(shù)會(huì)被調(diào)用。
ev.target.value 獲取到當(dāng)前選中的選項(xiàng)的值(字符串類型)。
toInt(ev.target.value) 將獲取到的值傳遞給 toInt 函數(shù),嘗試將其轉(zhuǎn)換為整數(shù)。
setfn(...) 調(diào)用傳入的 setfn 函數(shù),并將轉(zhuǎn)換后的值傳遞給它,從而更新父組件中的 value。
4.return html\\...\;:
使用 Preact 的 html 模板字符串來(lái)定義組件的 JSX 結(jié)構(gòu)。
html\\...\`` 是 Preact 的一個(gè)標(biāo)簽?zāi)0遄置媪浚糜趧?chuàng)建虛擬 DOM 節(jié)點(diǎn)。
5.<select onchange=${onchange} class="w-full rounded font-normal border py-0.5 px-1 text-gray-600 focus:outline-none text-sm disabled:cursor-not-allowed" disabled=${disabled}>:
- 創(chuàng)建一個(gè) <select> 元素(下拉選擇框)。
- onchange=${onchange} 將 onchange 函數(shù)設(shè)置為 <select> 元素的 onchange 事件處理函數(shù)。
- class="..." 設(shè)置 <select> 元素的 CSS 類名,用于控制其樣式。 這些類名看起來(lái)像是來(lái)自 Tailwind CSS。
- disabled=${disabled} 根據(jù) disabled prop 的值來(lái)禁用或啟用下拉選擇框。
6.${options.map(v => html\\<option value=${v[0]} selected=${v[0] == value}>${v[1]}<//>\)}:
使用 options.map() 方法遍歷 options 數(shù)組,為每個(gè)選項(xiàng)創(chuàng)建一個(gè) <option> 元素。
v 是 options 數(shù)組中的每個(gè)元素,它是一個(gè)包含兩個(gè)元素的數(shù)組:[value, label]。
<option value=${v[0]} selected=${v[0] == value}>${v[1]}<//> 創(chuàng)建一個(gè) <option> 元素。
value=${v[0]} 設(shè)置 <option> 元素的 value 屬性為選項(xiàng)的值。
selected=${v[0] == value} 設(shè)置 <option> 元素的 selected 屬性。如果當(dāng)前選項(xiàng)的值 v[0] 等于組件的 value prop,則該選項(xiàng)會(huì)被選中。
${v[1]} 設(shè)置 <option> 元素的顯示文本為選項(xiàng)的標(biāo)簽。
<//> 是 Preact 中閉合標(biāo)簽的簡(jiǎn)寫形式,相當(dāng)于 </option>。
7.<//>:
閉合 <select> 標(biāo)簽,相當(dāng)于 </select>。
總結(jié):
SelectValue 組件是一個(gè)可復(fù)用的下拉選擇框組件,它接收選項(xiàng)列表、當(dāng)前選中的值以及一個(gè)用于更新值的函數(shù)作為 props。當(dāng)用戶選擇不同的選項(xiàng)時(shí),組件會(huì)調(diào)用 setfn 函數(shù)來(lái)更新父組件中的值。 toInt 函數(shù)用于確保傳遞給 setfn 的值是整數(shù)(如果選項(xiàng)值是整數(shù))。 該組件還支持禁用狀態(tài)。
export function SelectValue({value, setfn, options, disabled}) { const toInt = x => x == parseInt(x) ? parseInt(x) : x; const onchange = ev => setfn(toInt(ev.target.value)); return html` <select onchange=${onchange} class="w-full rounded font-normal border py-0.5 px-1 text-gray-600 focus:outline-none text-sm disabled:cursor-not-allowed" disabled=${disabled}> ${options.map(v => html`<option value=${v[0]} selected=${v[0] == value}>${v[1]}<//>`) } <//>`; }; function DHCP({}) { const [selectedValue, setSelectedValue] = useState(1); const options = [ [1, 'Option 1'], [2, 'Option 2'], [3, 'Option 3'], ]; return html` <div> <${SelectValue} value=${selectedValue} setfn=${setSelectedValue} options=${options} disabled=${false} /> <p>Selected value: ${selectedValue}</p> </div> `; };
代碼解釋:
useState(1)
:初始化selectedValue
狀態(tài)為1
。 這意味著下拉列表的初始選中值為1
。setSelectedValue
:是更新selectedValue
狀態(tài)的函數(shù)。 當(dāng)下拉列表的值發(fā)生改變時(shí),SelectValue
組件會(huì)調(diào)用這個(gè)函數(shù),并將選中的值傳遞給它。options
:定義了下拉列表的選項(xiàng)。<SelectValue ... />
:渲染SelectValue
組件,并將value
、setfn
、options
和disabled
props 傳遞給它。<p>Selected value: ${selectedValue}</p>
:顯示當(dāng)前選中的值。
總結(jié):
使用
SelectValue
組件的步驟如下:
- 導(dǎo)入組件。
- 定義狀態(tài)(可選)。
- 定義選項(xiàng)。
- 渲染組件,并將必要的 props 傳遞給它。
希望這個(gè)解釋能夠幫助你理解如何使用
SelectValue
組件。
到此這篇關(guān)于preact組件案例的使用的文章就介紹到這了,更多相關(guān)preact組件案例的使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
教你使用javascript簡(jiǎn)單寫一個(gè)頁(yè)面模板引擎
不知道你有木有聽(tīng)說(shuō)過(guò)一個(gè)基于Javascript的Web頁(yè)面預(yù)處理器,叫做AbsurdJS。只是打算寫一個(gè)CSS的預(yù)處理器,后來(lái)擴(kuò)展到了CSS和HTML,可以用來(lái)把Javascript代碼轉(zhuǎn)成CSS和HTML代碼。當(dāng)然,由于可以生成HTML代碼,你也可以把它當(dāng)成一個(gè)模板引擎,用于在標(biāo)記語(yǔ)言中填充數(shù)據(jù)。2015-05-05JavaScript運(yùn)行過(guò)程中的“預(yù)編譯階段”和“執(zhí)行階段”
這篇文章主要介紹了JavaScript運(yùn)行過(guò)程中的“預(yù)編譯階段”和“執(zhí)行階段”的相關(guān)資料,需要的朋友可以參考下2015-12-12JavaScript調(diào)試的多個(gè)必備小Tips
這篇文章主要給大家介紹了關(guān)于JavaScript調(diào)試的多個(gè)必備小Tips,文章給出了詳細(xì)的介紹與示例代碼,有需要的朋友們可以參考借鑒,下面來(lái)一起學(xué)習(xí)學(xué)習(xí)學(xué)習(xí)吧。2017-01-01詳解JavaScript創(chuàng)建數(shù)組的三種方式
這篇文章主要介紹了JavaScript創(chuàng)建數(shù)組的三種方式:直接聲明,?以對(duì)象方式創(chuàng)建數(shù)組和使用?Array.from()?方法創(chuàng)建,并通過(guò)代碼示例講解的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下2024-06-06JavaScript中的連續(xù)賦值問(wèn)題實(shí)例分析
這篇文章主要介紹了JavaScript中的連續(xù)賦值問(wèn)題,結(jié)合實(shí)例形式分析了javascript賦值語(yǔ)句以及連續(xù)賦值操作相關(guān)用法與操作注意事項(xiàng),需要的朋友可以參考下2019-07-07IE6與IE7中,innerHTML獲取param的區(qū)別
最近,在用一些web編輯器,發(fā)現(xiàn)插入一段mp3后,查看源代碼,object標(biāo)簽中的param都被刪除。下面我演示給大家看看。2009-03-03js中int和string數(shù)據(jù)類型互相轉(zhuǎn)化實(shí)例
在本篇文章里小編給大家分享了關(guān)于js中int和string數(shù)據(jù)類型互相轉(zhuǎn)化實(shí)例和代碼,需要的朋友們學(xué)習(xí)下。2019-01-01Bootstrap Table 在指定列中添加下拉框控件并獲取所選值
通過(guò) bootstrap-table 的Column 配置項(xiàng)中的formatter,將獲取到的數(shù)據(jù)轉(zhuǎn)換為包含數(shù)據(jù)的 select 控件。然后根據(jù)用戶選擇項(xiàng)更新對(duì)應(yīng)單元格數(shù)據(jù),最后通過(guò)getallselection方法獲取所選行數(shù)據(jù)2017-07-07javascript contains和compareDocumentPosition 方法來(lái)確定是否HTML節(jié)點(diǎn)間的關(guān)
一個(gè)很棒的 blog 文章,是 PPK 兩年前寫的,文章中解釋了 contains() 和 compareDocumentPosition() 方法運(yùn)行在他們各自的瀏覽器上。2010-02-02