首頁  >  文章  >  web前端  >  詳解React Native之prop-types進行屬性確認

詳解React Native之prop-types進行屬性確認

小云云
小云云原創
2018-05-14 13:57:312169瀏覽

本文主要介紹了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,

相關推薦:


react native與webview通訊實例詳解

#React Native開源時間日期選擇器元件的相關詳解

#react native 中View元件中的ref屬性介紹#

以上是詳解React Native之prop-types進行屬性確認的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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