Components 與Props - React
文章推薦指數: 80 %
概念上來說,component 就像是JavaScript 的function,它接收任意的參數(稱之為「props」)並且回傳描述畫面的React element。
Function Component 與Class Component.
Component使你可以將UI拆分成獨立且可複用的程式碼,並且專注於各別程式碼的思考。
本章節旨在介紹component的相關概念,你也可以在此參閱詳細的API文件。
概念上來說,component就像是JavaScript的function,它接收任意的參數(稱之為「props」)並且回傳描述畫面的Reactelement。
FunctionComponent與ClassComponent
定義component最簡單的方法即是撰寫一個Javascriptfunction:
functionWelcome(props){
return
Hello,{props.name}
; } 此function是一個符合規範的Reactcomponent,因為它接受一個「props」(指屬性properties)物件並回傳一個Reactelement。我們稱之為functioncomponent,因為它本身就是一個JavaScriptfunction。
同樣的,你也可以使用ES6Class來定義component: classWelcomeextendsReact.Component{ render(){ return
Hello,{this.props.name}
; } } 上述兩種component在React中是同等的。Function和Classcomponent兩者都擁有額外的特性,我們將會在下一個章節探討。
Render一個Component 在此之前,我們只見過這種相當於DOM標籤的Reactelement: constelement=; 不過,Reactelement也可以是使用者自定義的component: constelement=
我們稱這個object為「props」。
舉例來說,這段程式碼會在頁面上render出「Hello,Sara」: functionWelcome(props){return
Hello,{props.name}
; } constroot=ReactDOM.createRoot(document.getElementById('root')); constelement=React以{name:'Sara'}作為props傳入Welcomecomponent並呼叫。
Welcomecomponent回傳了
Hello,Sara
這個element作為返回值。ReactDOM有效的將DOM更新為
Hello,Sara
。注意:Component的字首須為大寫字母 React會將小寫字母開頭的組件視為原始DOM標籤,舉例來說,就會被視為是HTML的div標籤,但是
想要了解更多關於此慣例的原因,請參閱JSXInDepth章節。
組合Component Component可以在輸出中引用其他component。
我們可以在任何層次中抽象化相同的component,按鈕、表單、對話框、甚至是整個畫面,在React應用程式中都將以component的方式呈現。
舉例來說,我們可以建立一個render多次Welcome的Appcomponent: functionWelcome(props){ return
Hello,{props.name}
; } functionApp(){ return(然而,如果你將React結合至現存的應用程式中,你可能需要使用像Button這樣的小型component,並由下往上,逐步應用到畫面的最高層級。
抽離Component 別害怕將component拆分成更小的component。
舉例來說,我們看這個Comment的component: functionComment(props){ return(
它的作用是在一個社交網站上render一則評論。
這個component可能因為太多的巢狀關係而難以更動,而且也難以複用獨立的部分。
讓我們把一些component從中分離吧。
首先,我們將Avatar分離出來: functionAvatar(props){ return(
這是為什麼我們給他一個更為一般的名字:user而不是author。
我們建議從component的角度為props命名,而不是它的使用情境。
現在我們可以稍微簡化Comment: functionComment(props){ return(
以經驗來說,如果一個UI中有一部分會被重複使用很多次(Button、Panel、Avatar),或者它足夠複雜(App、FeedStory、Comment),則可以將它提取到獨立的component。
Props是唯讀的 不管你使用function或是class來宣告component,都絕不能修改自己的props。
例如這個sumfunction: functionsum(a,b){ returna+b; } 像這樣的function是Purefunction的,因為他們並沒有改變輸入,而且相同的輸入總是回傳一樣的結果。
相反地,這個function並非Purefunction,因為它更改了它的參數: functionwithdraw(account,amount){ account.total-=amount; } React是很彈性的,但有一條嚴格的規定: 所有的Reactcomponent都必須像Purefunction一般保護他的props 當然,應用程式的UI是動態的,而且總是隨著時間改變。
在下個章節,我們會介紹一個新的概念「state」。
State可以在不違反上述規則的前提下,讓Reactcomponent隨使用者操作、網路回應、或是其他方式改變輸出內容。
Isthispageuseful?Editthispage安裝開始將React加入到網頁建立全新的React應用程式CDN連結ReleaseChannels主要概念1.HelloWorld2.JSX介紹3.RenderingElement4.Component與Prop5.State和生命週期6.事件處理7.條件Render8.列表與Key9.表單10.提升State11.Compositionvs繼承12.用React思考進階指南無障礙Code-SplittingContext錯誤邊界ForwardingRefsFragmentHigher-OrderComponent整合其他函式庫深入JSX最佳化效能PortalsProfiler沒有ES6的React沒有JSX的ReactReconciliationRefs和DOMRenderProps靜態型別檢查嚴格模式TypecheckingWithPropTypesUncontrolledComponentWebComponentAPI參考ReactReact.ComponentReactDOMReactDOMClientReactDOMServerDOMElementSyntheticEvent測試工具TestRendererJS環境要求術語表Hooks1.Hook介紹2.Hook概觀3.使用StateHook4.使用EffectHook5.Hook的規則6.打造你自己的Hook7.HookAPI參考8.Hook常見問題測試測試概觀測試方法測試環境貢獻如何貢獻Codebase概觀實現說明設計原則FAQAJAX和APIBabel、JSX和構建步驟傳遞Function到ComponentComponentState樣式和CSS檔案結構版本控制政策VirtualDOM和InternalsPreviousarticleRenderingElementNextarticleState和生命週期
延伸文章資訊
- 1props - 英語_讀音_用法_例句 - 海词词典
海詞詞典,最權威的學習詞典,為您提供props的在線翻譯,props是什麼意思,props的真人發音,權威用法和精選例句等。
- 2React的props與state - iT 邦幫忙
props是React父元件與子元件間溝通的橋樑,是靜態(唯獨)的。 ... 就會印出joyce。 import React, { Component } from 'react'; class...
- 3prop中文(繁體)翻譯:劍橋詞典
prop翻譯:支撐;支持, 電影/戲劇, 道具, 飛機/輪船, 螺旋槳(propeller的非正式說法), 支持, 支撐物, (橄欖球隊)支柱前鋒(該球員體壯有力, ...
- 4"props to you "是什麼意思? - 關於英語(美國)(英文)的問題
props to you 的意思It means you did something worthy of respect.|It means “you did a good job”. But ...
- 5props 屬性| 勇者鬥Vue 龍
子組件可以設定 props 屬性,而父組件可以將這些屬性用DOM 客製屬性設定在子組件上,在 ... JavaScript 中使用camelCase Vue.component('compone...