Astro Props(Astro 屬性)

你可能對於像 React、Vue 或 Svelte 這樣的現代 JavaScript 框架中的屬性概念很熟悉。 注意:我之前寫過相關文章,你可以在 React Props、Vue Props 和 Svelte Props 找到這些文章。 屬性是我們將信息傳遞給組件的方式。這包括變數和函數。 Astro 組件 也支持屬性。 以下是如何使用它們。 假設你在 src/components/Hello.astro 中定義了一個 Hello 組件: <p>Hello!</p> 在使用組件時,你可以為它傳遞一個名為 name 的屬性,像這樣:<Hello name="Flavio" />,你可以使用以下語法在組件輸出中顯示名稱: <p>Hello {Astro.props.name}!</p> 通常,在組件的 frontmatter 部分使用對象解構將屬性提取到單獨的變量中,這在擁有複雜組件時很方便: --- const { name } = Astro.props --- <p>Hello {name}!</p> 下面是如何處理多個屬性,以支持這樣的使用方式:<Hello name="Flavio" message="歡迎" /> --- const { name, message } = Astro.props --- <p>{message} {name}!</p> 以這種方式,你可以為未設置的屬性提供默認值: --- const { name = '', message = 'Hello' } = Astro....

React: 展示型组件與容器型组件

在React中,組件通常被分為兩大類:展示型組件和容器型組件。 每個組件都具有其獨特的特性。 展示型組件主要關注生成要輸出的標記。 它們不管理任何類型的狀態,除非與展示相關的狀態。 容器型組件主要關注“後端”操作。 它們可能處理各種子組件的狀態。 它們可能包裝幾個展示型組件。 它們可能與Redux進行交互。 為了簡化區分,我們可以說展示型組件關注外觀,容器型組件關注使事情運作。 例如,這是一個展示型組件。它從其props中獲取數據,並僅關注顯示元素: const Users = props => ( <ul> {props.users.map(user => ( <li>{user}</li> ))} </ul> ) 另一方面,這是一個容器型組件。它管理並存儲自己的數據,並使用展示型組件來顯示它: class UsersContainer extends React.Component { constructor() { this.state = { users: [] } } componentDidMount() { axios.get('/users').then(users => this.setState({ users: users })) ) } render() { return <Users users={this.state.users} /> } }

React概念:組合

什麼是組合,為什麼它是React應用中的關鍵概念? 在程式設計中,組合允許您通過結合小而專注的函數來構建更複雜的功能。 例如,想象使用map()從初始數組創建新的數組,然後使用filter()過濾結果: const list = ['Apple', 'Orange', 'Egg'] list.map(item => item[0]).filter(item => item === 'A') //'A' 在React中,組合使您能夠享受一些很棒的優勢。 您可以創建小而精簡的組件,並使用它們來組合更多的功能。該怎麼做呢? 創建組件的專用版本 使用外部組件來擴展和專門化一個更通用的組件: const Button = props => { return <button>{props.text}</button> } const SubmitButton = () => { return <Button text="Submit" /> } const LoginButton = () => { return <Button text="Login" /> } 將方法作為props傳遞 組件可以專注於跟蹤點擊事件,例如,當點擊事件發生時,實際發生的事情由容器組件決定: const Button = props => { return <button onClick={props.onClickHandler}>{props.text}</button> } const LoginButton = props => { return <Button text="Login" onClickHandler={props....

Vue.js元件

元件是介面的單一、獨立單位。它們可以擁有自己的狀態、標記和樣式。 如何使用元件 Vue 元件可以以四種主要方式定義。 讓我們用程式碼來談談。 第一種方式是: new Vue({ // 選項 }) 第二種方式是: Vue.component('component-name', { // 選項 }) 第三種方式是使用區域元件 (local components):這些元件僅在特定元件中可存取,而在其他地方則無法使用(非常適合封裝)。 第四種方式是在 .vue 檔案中,也稱為單一檔案元件 (Single File Components)。 讓我們詳細探討前三種方式。 在建構不是單頁應用程式 (Single Page Application, SPA) 的應用程式中使用 new Vue() 或 Vue.component() 是使用 Vue 的標準方式。比如在聯絡表單或購物車等部分頁面中使用 Vue.js。或者可能 Vue 是在所有頁面中使用,但是伺服器渲染版面配置,並將 HTML 提供給客戶端,然後載入您建立的 Vue 應用程式。 在 SPA 中,由 Vue 建構 HTML 的情況下,使用單一檔案元件 (Single File Components) 是更常見的做法,因為它們更方便。 您可以通過將 Vue 控制項掛載到 DOM 元素上來實例化 Vue。如果您有一個 <div id="app"></div> 標籤,您將使用: new Vue({ el: '#app' }) 使用 Vue....

Vue.js元件通訊

本篇介紹在Vue.js應用程式中如何讓元件彼此通訊。 Props 從子元件到父元件透過事件通訊 使用事件巴士在任意元件之間通訊 其他替代方案 Vue元件可以使用不同的方式進行通訊。 Props 第一種方式是使用props。 父元件可以透過在元件宣告時加入參數,將資料傳遞給子元件: <template> <div> <Car color="green" /> </div> </template> <script> import Car from './components/Car' export default { name: 'App', components: { Car } } </script> Props是單向的,只能由父元件傳送資料給子元件。當父元件改變prop的值時,新的值會被傳送給子元件並重新渲染。 反過來是不行的,子元件不應該去修改prop的值。 使用事件在子元件到父元件之間通訊 事件允許你從子元件向父元件進行通訊: <script> export default { name: 'Car', methods: { handleClick: function() { this.$emit('clickedSomething') } } } </script> 在父元件的template中,可以使用v-on指令來攔截這個事件: <template> <div> <Car v-on:clickedSomething="handleClickInParent" /> <!-- 或者 --> <Car @clickedSomething="handleClickInParent" /> </div> </template> <script> export default { name: 'App', methods: { handleClickInParent: function() { //....

使用 CSS 去設計 Vue.js 元件

在本文中,我們將探討多種使用 CSS 去設計 Vue.js 元件的方式。 注意: 本教程使用 Vue.js 的單文件元件 最簡單的方式是在 Vue.js 元件中使用 style 標籤,就像在 HTML 中一樣: <template> <p style="text-decoration: underline">Hi!</p> </template> <script> export default { data() { return { decoration: 'underline' } } } </script> 這是最靜態的方式。如果你希望 underline 在元件的資料中被定義,你可以這樣做: <template> <p :style="{'text-decoration': decoration}">Hi!</p> </template> <script> export default { data() { return { decoration: 'underline' } } } </script> :style 是 v-bind:style 的縮寫。在本教程中,我將使用這個縮寫。 注意到我們必須將 text-decoration 用引號包起來。這是因為其中有連字符,而連字符不是有效的 JavaScript 識別符號。 你可以避免使用引號,使用 Vue.js 提供的特殊 camelCase 語法,並將其改寫為 textDecoration:...

在React中处理组件上的DOM事件

我想根据鼠标悬停状态来显示或隐藏一个小面板。 当我悬停在链接上时,面板会显示出来。 然后我可以用鼠标进入这个面板,当我移开鼠标时,面板会隐藏起来。 就像Twitter上的个人资料,在鼠标悬停在一个人的名字上时会显示出来: 对于触发面板显示的<a>元素,我添加了onMouseEnter事件: <a onMouseEnter={() => { setShowCard(true) }} >flavio</a> 所以当我用鼠标悬停在它上面时,面板会显示出来,因为它是根据我之前设置的showCard状态变量来显示的: const [showCard, setShowCard] = useState(false) 然后我有一个ProfileCard组件,但是我不能简单地这样做: <ProfileCard onMouseEnter={() => { setShowCard(true) }} onMouseLeave={() => { setShowCard(false) }} /> 因为它不起作用。ProfileCard不是一个DOM元素,所以它无法响应被触发的事件。 我必须将onMouseEnter和onMouseLeave作为props传递给ProfileCard组件,然后在组件内部找到可以接收这些事件的正确DOM元素,并在那里附加事件处理程序。在这种情况下,我使用了容器div: const ProfileCard = ({ onMouseEnter, onMouseLeave }) => ( <div onMouseEnter={onMouseEnter} onMouseLeave={onMouseLeave}> ... 现在当离开面板时,它会隐藏起来。

從哪裡下手購買 Arduino 和電子設備

在我的電子教程系列中,我使用了一套我多年來購買的工具。 我確實可以給你一些建議,讓你開始進行我所做的實驗。 Arduino 是一個很棒的項目,我強烈推薦你購買原裝的 Arduino 零件,以支持該項目和整個生態系統。 但是,當你剛開始時,你需要很多小零件,如果單獨購買可能會很貴。你可以找到一些一次性配備許多東西的套件。 特別推薦一個由 Elegoo 生產的套件,你可以在亞馬遜上以53.99美元/45歐元(撰寫時)的價格找到。它被稱為 ELEGOO UNO R3 Project Most Complete Starter Kit w/Tutorial Compatible with Arduino IDE (63 Items)。 這是一個包含了一塊 Arduino Uno rev 3複製板和許多組件、傳感器和小零件的盒子,這些東西通常很有用: 它附帶了很多東西:一個麵包板、很多電線、電阻、LED、電池、擴展板、電源模塊、水位傳感器、數字鍵盤、液晶屏、按鈕、搖杆、步進馬達和伺服馬達、紅外接收器和發射器、繼電器、超聲波傳感器等等。 另一個非常完整且更便宜的套件(但似乎零件和傳感器較少)是 ELEGOO UNO Project Super Starter Kit with Tutorial and UNO R3 Compatible with Arduino IDE。 我給我的一位朋友送了其中一個,很酷。 還有其他類似的套件,但請確保板子是 Arduino Uno,這是更好的起點。 然後我建議你購買一個多用表。任何多用表都可以,你可以在當地工具店或互聯網上的任何地方買到。 就先這樣。你需要先試試便宜的套件,然後如果你喜歡嘗試電子設備,就沒有極限了。 你可以購買一個具有 WiFi 和藍牙通信功能的設備,例如 Arduino MKR Wifi 1010 和 Arduino MKR GPS shield 來使用 GPS 等功能。