首頁 web前端 js教程 在React Native中使用prop-types如何實作屬性確認

在React Native中使用prop-types如何實作屬性確認

Jun 19, 2018 pm 05:58 PM
native react 屬性

本篇文章主要介紹了React Native之prop-types進行屬性確認詳解,現在分享給大家,也給大家做個參考。

屬性確認的作用

使用 React Native 建立的元件是可以重複使用的,所以我們開發的元件可能會給專案組其他同事使用。但別人可能對這個元件不熟悉,常常會忘記使用某些屬性,或是某些屬性傳遞的資料類型有誤。

因此我們可以在開發 React Native 自訂元件時,可以透過屬性確認來宣告這個元件需要哪些屬性。這樣,如果在呼叫這個自訂元件時沒有提供對應的屬性,則會在手機與偵錯工具中彈出警告訊息,告知開發者該元件需要哪些屬性。

React Native已經升級到0.51.0了,版本升級很快,但對舊專案也會有一些問題,常見的就是屬性找不到的問題。例如:

在React Native中使用prop-types如何實作屬性確認 

主要原因是隨著React Native的升級,系統廢棄了很多的東西,過去我們可以直接使用React.PropTypes 來進行屬性確認,不過這個自React v15.5 起就被移除了,轉而使用prop-types函式庫來進行替換

#屬性確認

屬性確認的作用

使用React Native 建立的元件是可以重複使用的,所以我們開發的元件可能會給專案組其他同事使用。但別人可能對這個元件不熟悉,常常會忘記使用某些屬性,或是某些屬性傳遞的資料類型有誤。因此我們可以在開發 React Native 自訂元件時,可以透過屬性確認來聲明這個元件需要哪些屬性。

注意:為了保證 React Native 程式碼高效運行,屬性確認僅在開發環境中有效,正式發布的 App 運行時是不會進行檢查的。

prop-types 函式庫使用

和其他的第三方函式庫使用類似,prop-types的安裝會先進入專案根目錄,執行如下程式碼安裝prop-types庫:

npm install --save prop-types
登入後複製

然後在需要使用PropTypes屬性的地方引入:

import PropTypes from 'prop-types';
登入後複製

例子

#例如,我們寫一個導航列的例子,效果如下:

在React Native中使用prop-types如何實作屬性確認

import React, {
 Component
} from 'react'
import {
 StyleSheet,
 View,
 Animated,
 Image,
 TouchableOpacity,
 TouchableNativeFeedback,
 Platform
} from 'react-native'
import px2dp from '../utils/Utils'
import Icon from 'react-native-vector-icons/Ionicons'
import PropTypes from 'prop-types';

export default class NavBar extends Component{

 static propTypes = {
  title: PropTypes.string,
  leftIcon: PropTypes.string,
  rightIcon: PropTypes.string,
  leftPress: PropTypes.func,
  rightPress: PropTypes.func,
  style: PropTypes.object
 }
 static topbarHeight = (Platform.OS === 'ios' ? 64 : 44)
 renderBtn(pos){
  let render = (obj) => {
  const { name, onPress } = obj
  if(Platform.OS === 'android'){
   return (
   
    
   
   )
  }else{
   return (
   
    
   
   )
  }
  }
  if(pos == "left"){
  if(this.props.leftIcon){
   return render({
   name: this.props.leftIcon,
   onPress: this.props.leftPress
   })
  }else{
   // return ()
   return ()
  }
  }else if(pos == "right"){
  if(this.props.rightIcon){
   return render({
   name: this.props.rightIcon,
   onPress: this.props.rightPress
   })
  }else{
   return ()
  }
  }
 }
 render(){
  return(
   
    {this.renderBtn("left")}
    {this.props.title}
    {this.renderBtn("right")}
   
  )
 }
}
const styles = StyleSheet.create({
 topbar: {
  height: NavBar.topbarHeight,
  backgroundColor: "#06C1AE",
  flexDirection: 'row',
  justifyContent: 'space-between',
  alignItems: 'center',
  paddingTop: (Platform.OS === 'ios') ? 20 : 0,
  paddingHorizontal: px2dp(10)
 },
 btn: {
  width: 22,
  height: 22,
  justifyContent: 'center',
  alignItems: 'center'
 },
 title:{
  color: "#fff",
  fontWeight: "bold",
  fontSize: px2dp(16),
  marginLeft: px2dp(5),
 }
});
登入後複製

語法

1,要求屬性是指定的JavaScript 基本型別。例如:

屬性: PropTypes.array,##​​#屬性: PropTypes.bool,
屬性: PropTypes.func,
屬性: PropTypes.number,
屬性: PropTypes.object,
屬性: PropTypes.string,

2,要求屬性是可渲染節點。例如:

屬性: PropTypes.node,

3,要求屬性是某個 React 元素。例如:

屬性: PropTypes.element,

4,要求屬性是某個指定類別的實例。例如:

屬性: PropTypes.instanceOf(NameOfAClass),

5,要求屬性取值為特定的幾個值。例如:

屬性: PropTypes.oneOf(['value1', 'value2']),

#6,要求屬性可以為指定型別中的任一個。例如:

屬性: PropTypes.oneOfType([

  PropTypes.bool,
  PropTypes.number,
  PropTypes.instanceOf(NameOfAClass),
])

7,要求屬性為指定類型的陣列。例如:

屬性: PropTypes.arrayOf(PropTypes.number),

8,要求屬性是一個有特定成員變數的物件。例如:

屬性: PropTypes.objectOf(PropTypes.number),

9,要求屬性是一個指定構成方式的物件。例如:

屬性: PropTypes.shape({

  color: PropTypes.string,
  fontSize: PropTypes.number,
}),

10,屬性可以是任意類型。例如:

屬性: PropTypes.any

將屬性宣告為必須

使用關鍵字 isRequired 宣告它是必要的。

屬性: PropTypes.array.isRequired,

屬性: PropTypes.any.isRequired,
屬性: PropTypes.instanceOf(NameOfAClass).isRequired,

上面是我整理給大家的,希望今後對大家有幫助。

相關文章:

使用async-validator如何寫Form元件(詳細教學)

使用casperjs和resemble.js如何實現像素比較(詳細教學)

使用JavaScript如何實現快速排序(詳細教學)

使用js實作推箱子小遊戲(詳細教學)

以上是在React Native中使用prop-types如何實作屬性確認的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1317
25
PHP教程
1268
29
C# 教程
1244
24
PHP、Vue和React:如何選擇最適合的前端框架? PHP、Vue和React:如何選擇最適合的前端框架? Mar 15, 2024 pm 05:48 PM

PHP、Vue和React:如何選擇最適合的前端框架?隨著互聯網技術的不斷發展,前端框架在Web開發中起著至關重要的作用。 PHP、Vue和React作為三種代表性的前端框架,每一種都具有其獨特的特徵和優勢。在選擇使用哪種前端框架時,開發人員需要根據專案需求、團隊技能和個人偏好做出明智的決策。本文將透過比較PHP、Vue和React這三種前端框架的特徵和使

Java框架與前端React框架的整合 Java框架與前端React框架的整合 Jun 01, 2024 pm 03:16 PM

Java框架與React框架的整合:步驟:設定後端Java框架。建立專案結構。配置建置工具。建立React應用程式。編寫RESTAPI端點。配置通訊機制。實戰案例(SpringBoot+React):Java程式碼:定義RESTfulAPI控制器。 React程式碼:取得並顯示API回傳的資料。

爐石戰記絕望線縷屬性介紹 爐石戰記絕望線縷屬性介紹 Mar 20, 2024 pm 10:36 PM

絕望線縷是暴雪娛樂旗下佳作《爐石戰記》中的一張稀有卡牌,在「威茲班的工坊」卡包中有機會獲得。可消耗100/400點奧術之塵合成普通/金色版本。爐石戰記絕望線縷屬性介紹答:在威茲班的工坊卡包中有幾率獲得,也可以透過奧術之塵合成。稀有度:稀有類型:法術職業:死亡騎士法力值:1效果:使所有隨從獲得亡語:對所有隨從造成1點傷害

vue.js vs.反應:特定於項目的考慮因素 vue.js vs.反應:特定於項目的考慮因素 Apr 09, 2025 am 12:01 AM

Vue.js適合中小型項目和快速迭代,React適用於大型複雜應用。 1)Vue.js易於上手,適用於團隊經驗不足或項目規模較小的情況。 2)React的生態系統更豐富,適合有高性能需求和復雜功能需求的項目。

如何判斷jQuery元素是否具有特定屬性? 如何判斷jQuery元素是否具有特定屬性? Feb 29, 2024 am 09:03 AM

如何判斷jQuery元素是否具有特定屬性?在使用jQuery操作DOM元素時,常會遇到需要判斷元素是否具有某個特定屬性的情況。在這種情況下,我們可以藉助jQuery提供的方法來輕鬆實現這項功能。以下將介紹兩種常用的方法來判斷一個jQuery元素是否具有特定屬性,並附上具體的程式碼範例。方法一:使用attr()方法和typeof運算子//判斷元素是否具有特定屬

React在HTML中的作用:增強用戶體驗 React在HTML中的作用:增強用戶體驗 Apr 09, 2025 am 12:11 AM

React通過JSX與HTML結合,提升用戶體驗。 1)JSX嵌入HTML,使開發更直觀。 2)虛擬DOM機制優化性能,減少DOM操作。 3)組件化管理UI,提高可維護性。 4)狀態管理和事件處理增強交互性。

英雄迷宮冒險屬性怎麼提升 英雄迷宮冒險屬性怎麼提升 Mar 20, 2024 pm 03:56 PM

英雄迷宮冒險是一款設計很是好玩操作模式的單機養成遊戲,提供了優秀經營模擬的角色精彩,經營類加rpg的優秀玩法設計,帶給玩家以深度操作冒險的精彩,有關於屬性該怎麼提升內容也是很多玩家所感興趣,本期為大家帶來英雄迷宮冒險屬性提升向的攻略助力!英雄迷宮冒險屬性快速提升攻略想提升某一個屬性怎麼做?A:找相同成長的裝備,比如拳套、長槍具有速度成長,單、雙手劍具有力量成長,斧、錘具有體能成長。注意:生命值除了木棍只有盾牌才能成長運氣只有飾品才能成長。怎麼刷屬性快?A:地圖等級越高、怪物越多、裝備LV成長越大

React與Vue:Netflix使用哪個框架? React與Vue:Netflix使用哪個框架? Apr 14, 2025 am 12:19 AM

NetflixusesAcustomFrameworkcalled“ Gibbon” BuiltonReact,notReactorVuedIrectly.1)TeamSperience:selectBasedonFamiliarity.2)ProjectComplexity:vueforsimplerprojects:reactforforforproproject,reactforforforcompleplexones.3)cocatizationneedneeds:reactoffipicatizationneedneedneedneedneedneeds:reactoffersizationneedneedneedneedneeds:reactoffersizatization needefersmoreflexibleise.4)

See all articles