摘要:在大多數情況下,我們期望這些是一種特定類型或一組類型也稱為或。例如,幾天前我們構建的組件接受一個稱為的屬性,我們期望它是一個字符串。必需類型可以通過在任意個屬性類型中附加中描述來將需要傳遞給一個組件根據需要設置是非常有用的。
本文轉載自:眾成翻譯
譯者:iOSDevLog
鏈接:http://www.zcfy.cc/article/3818
原文:https://www.fullstackreact.com/30-days-of-react/day-8/
我們正在考慮如何在今天重新使用React組件,這樣我們不僅可以在應用而且可以在團隊中共享我們的組件。
唷! 我們做了第二周(相對毫發)! 通過這一點,我們已經討論了React(props,state,生命周期掛鉤函數,JSX等)的大部分基本特性。 在本節中,我們將看一下注解我們的組件。
PropTypes您可能已經注意到我們在組件中使用了props 。 在大多數情況下,我們期望這些是一種特定類型或一組類型(也稱為object 或string)。 React提供了一種定義和驗證這些類型的方法,使我們能夠輕松暴露組件API。
文檔化不僅是好習慣,對于構建也是有益的reusable react components.
React.PropTypes對象導出一堆不同的類型,我們可以用它來定義組件的prop應該是什么類型的。 我們可以在ES6類風格的React prop中使用propTypes方法來定義它們:
class Clock extends React.Component { // ... } Clock.propTypes = { // key is the name of the prop and // value is the PropType }
使用React.createClass() 形式, 我們定義一個propTypes的key
例如,我們可以將Clock組件的形式重寫為:const Clock = React.createClass({ proptypes: {} });
從這個prop里面,我們可以定義一個對象,它具有一個prop的key作為我們定義的prop的名稱,它應被定義的類型(或類型)的一個值。
例如,幾天前我們構建的Header 組件接受一個稱為title 的屬性,我們期望它是一個字符串。 我們可以將其類型定義為字符串:
class Header extends React.Component { // ... } Header.propTypes = { title: React.PropTypes.string }
React有很多類型可供選擇,在React.PropTypes 對象上導出,甚至允許我們定義一個自定義的對象類型。 看看可用類型的總體列表:
[](#basic-types)基本類型React暴露了我們可以開箱即用的幾種基本類型。
類型 | 例子 | 類 |
---|---|---|
String | "hello" | React.PropTypes.string |
Number | 10, 0.1 | React.PropTypes.number |
Boolean | true / false | React.PropTypes.bool |
Function | const say => (msg) => console.log("Hello world") | React.PropTypes.func |
Symbol | Symbol("msg") | React.PropTypes.symbol |
Object | {name: "Ari"} | React.PropTypes.object |
Anything | "whatever", 10, | {} |
可以告訴React我們希望它傳遞_anything_可以使用React.PropTypes.node來呈現:
類型 | 例子 | 類 |
---|---|---|
A rendererable | 10, "hello" | React.PropTypes.node |
Clock.propTypes = { title: React.PropTypes.string, count: React.PropTypes.number, isOn: React.PropTypes.bool, onDisplay: React.PropTypes.func, symbol: React.PropTypes.symbol, user: React.PropTypes.object, name: React.PropTypes.node }
我們已經看過如何使用props從父組件到子組件進行通信。 我們可以使用函數從子組件到父組件進行通信。 當我們想要操作一個子組件的父組件時,我們會經常使用這種模式。
集合類型我們可以通過我們的props中的可迭代的集合。 當我們通過我們的活動通過一個數組時,我們已經看到了如何做到這一點。 要將組件的proptype聲明為數組,我們可以使用 React.PropTypes.array 注解。
我們也可以要求數組只能使用某種類型的對象 React.PropTypes.arrayOf([]).
類型 | 例子 | 類 |
---|---|---|
Array | [] | React.PropTypes.array |
Array of numbers | [1, 2, 3] | React.PropTypes.arrayOf([type]) |
Enum | ["Red", "Blue"] | React.PropTypes.oneOf([arr]) |
可以使用React.PropTypes.oneOfType([types])來描述可以是幾種不同類型之一的對象。
Clock.propTypes = { counts: React.PropTypes.array, users: React.PropTypes.arrayOf(React.PropTypes.object), alarmColor: React.PropTypes.oneOf(["red", "blue"]), description: React.PropTypes.oneOfType([ React.PropTypes.string, React.PropTypes.instanceOf(Title) ]), }對象類型
可以定義需要某個特定類型的特定類型或實例的類型。
類型 | 例子 | 類 |
---|---|---|
Object | {name: "Ari"} | React.PropTypes.object |
Number object | {count: 42} | React.PropTypes.objectOf() |
Instance | new Message() | React.PropTypes.objectOf() |
Object shape | {name: "Ari"} | React.PropTypes.shape() |
Clock.propTypes = { basicObject: React.PropTypes.object, numbers: React.PropTypes .objectOf(React.PropTypes.numbers), messages: React.PropTypes .instanceOf(Message), contactList: React.PropTypes.shape({ name: React.PropTypes.string, phone: React.PropTypes.string, }) }React類型
我們也可以通過React元素從父組件到子組件。 這對于構建模板和提供模板的定制非常有用。
類型 | 例子 | 類 |
---|---|---|
Element | React.PropTypes.element |
Clock.propTypes = { displayEle: React.PropTypes.element }
當我們使用_element_時,React希望我們能夠接受一個多帶帶的子組件。 也就是說,我們將無法傳遞多個元素。
// Invalid for elementsName
可以通過在_任意_個屬性類型中附加.isRequired中描述來將需要傳遞給一個組件:
Clock.propTypes = { title: React.PropTypes.name.isRequired, }
根據需要設置prop是非常有用的。當組件依賴于一個prop被它的父組件傳遞,如果沒有它將不會工作。
自定義類型最后,還可以傳遞一個函數來定義自定義類型。 我們可以做一個單一屬性或驗證數組。 自定義函數的一個要求是,如果驗證確定_not_ 傳遞,則期望我們返回一個 Error 對象:
類型 | 例子 | 類 |
---|---|---|
Custom | "something_crazy" | function(props, propName, componentName) {} |
CustomArray | ["something", "crazy"] | React.PropTypes.arrayOf(function(props, propName, componentName) {}) |
UserLink.propTypes = { userWithName: (props, propName, componentName) => { if (!props[propName] || !props[propName].name) { return new Error( "Invalid " + propName + ": No name property defined for component " + componentName ) } } }默認屬性
rendered, so we can define a common title instead by setting it"s default prop value.有時,我們希望能夠為屬性設置默認值。 例如,我們昨天構建的組件可能不需要傳遞標題。 如果不是,我們仍然需要一個標題來渲染,所以我們可以通過設置它的默認支持值來定義一個通用的標題。
要設置默認的prop值,我們可以在組件上使用defaultProps對象鍵。
Header.defaultProps = { title: "Github activity" }
當使用React.createClass() 形式時,我們可以定義一個名為getDefaultProps() 的對象鍵,該對象鍵將返回具有默認值道具的對象。
React.createClass({ getDefaultProps: () => ({ name: "Github activity" }) })
呃,今天我們瀏覽了很多文檔。 使用組件的propTypes 和defaultProps 屬性構建可重用組件是一個好主意。 不僅可以使開發人員之間進行溝通變得更加容易,而且在離開組件幾天后我們也可以輕松回收。 接下來,我們將回到代碼,并開始將某些風格整合到我們的組件中。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/84671.html
摘要:今天我們將討論創建組件的最終方案,即無狀態函數的純組件。今天我們正在研究一種處理提出的復雜數據的方法,稱為體系結構。第天部署介紹今天,我們將探討部署我們的應用所涉及的不同部分,以便外界可以使用我們的應用。 本文轉載自:眾成翻譯譯者:iOSDevLog鏈接:http://www.zcfy.cc/article/3758原文:https://www.fullstackreact.com/3...
摘要:但是使用標記將告訴瀏覽器處理路由就像服務器端路由一樣。組件需要一個稱為的屬性指向要渲染的客戶端路由。發生這種情況的原因是響應路由器將渲染與路徑匹配的所有內容除非另有指定。屬性預計將是一個函數將在對象連同和路由配置時調用。 本文轉載自:眾成翻譯譯者:iOSDevLog鏈接:http://www.zcfy.cc/article/3815原文:https://www.fullstackrea...
摘要:我們將討論三種不同的軟件測試范例單元測試功能測試和集成測試。在中單元測試通常不需要瀏覽器可以快速運行不需要寫入斷言本身通常是簡單而簡潔的。集成測試最后我們將研究的最后一種測試是集成測試。 本文轉載自:眾成翻譯譯者:iOSDevLog鏈接:http://www.zcfy.cc/article/3809原文:https://www.fullstackreact.com/30-days-of...
摘要:去營救有一種方法我們把我們的歸約器分成多個歸約器每個都只負責狀態樹的葉子。此外我們還學習了如何擴展以使用多個歸約器和動作以及多個連接的組件。 本文轉載自:眾成翻譯譯者:iOSDevLog鏈接:http://www.zcfy.cc/article/3825原文:https://www.fullstackreact.com/30-days-of-react/day-20/ 使用Redux,...
摘要:在我們的應用中添加太多的復雜度來加載外部數據之前今天我們將快速了解如何在應用中重復組件元素。出于性能原因使用虛擬嘗試限制在重新視圖時需要更新的元素的數量。 本文轉載自:眾成翻譯譯者:iOSDevLog鏈接:http://www.zcfy.cc/article/3826原文:https://www.fullstackreact.com/30-days-of-react/day-13/ 今...
閱讀 3661·2021-09-30 09:59
閱讀 2310·2021-09-13 10:34
閱讀 582·2019-08-30 12:58
閱讀 1513·2019-08-29 18:42
閱讀 2205·2019-08-26 13:44
閱讀 2931·2019-08-23 18:12
閱讀 3324·2019-08-23 15:10
閱讀 1630·2019-08-23 14:37