最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

React中props使用教程

 更新時(shí)間:2022年09月29日 14:59:30   作者:月光曬了很涼快  
props是組件(包括函數(shù)組件和class組件)間的內(nèi)置屬性,用其可以傳遞數(shù)據(jù)給子節(jié)點(diǎn),props用來傳遞參數(shù)。組件實(shí)例化過程中,你可以向其中傳遞一個(gè)參數(shù),這個(gè)參數(shù)會在實(shí)例化過程中被引用

1. children 屬性

概述:

children 屬性,表示組件標(biāo)簽的子節(jié)點(diǎn),當(dāng)組件標(biāo)簽有子節(jié)點(diǎn)時(shí),props 就會有該屬性,與普通的 props 一樣,其值可以是任意類型。單標(biāo)簽和雙標(biāo)簽中沒有數(shù)據(jù)就沒有此屬性。

語法:

# 父組件
class App extends React.Component {
  render() {
    return (
        <div>
          <Cmp>我是children中的值</Cmp>
        </div>
    )
  }
}
# 子組件
{props.children} 獲取數(shù)據(jù)

要點(diǎn):

  1. 在自定義組件標(biāo)簽中間寫的內(nèi)容,它都會通過 this.props.children 屬性獲取
  2. 如果自定義組件標(biāo)簽中間只有一個(gè)子元素,則此屬性返回一個(gè)對象,如果是多個(gè)子元素則返回一個(gè)數(shù)組。使用它就可以實(shí)現(xiàn)類似于vue中的插槽功能。

使用:

import React, { Component } from 'react';
class Child extends Component {
  render() {
    console.log(this.props.children);
    return (
      <div>
        <h3>我是child組件</h3>
        {
          this.props.children
            ?
            this.props.children
            :
            <div>我是默認(rèn)值</div>
        }
      </div>
    );
  }
}
class App extends Component {
  render() {
    return (
      <div>
        <Child>
          <div>我是child組件元素中間包裹的內(nèi)容1</div>
          <div>我是child組件元素中間包裹的內(nèi)容2</div>
          <div>我是child組件元素中間包裹的內(nèi)容3</div>
        </Child>
      </div>
    );
  }
}
export default App;

1.1 React.cloneElement方法

概述:

cloneElement 方法,是 React 中的頂層 Api 方法,作用是克隆一個(gè)虛擬 dom 對象。這個(gè)方法對 this.props.children 進(jìn)行加工拓展后,顯示在頁面上。

使用:

import React, { Component } from 'react';
class Child extends Component {
  state = {
    id: 1000
  }
  render() {
    // React中的頂層Api方法  克隆一個(gè)虛擬dom對象
    let cloneElement = React.cloneElement(this.props.children, {
      style: { color: 'red' },
      uid: this.state.id,
      onClick: () => console.log('我是事件', this.state.id)
    })
    console.log(cloneElement);
    return (
      <div>
        <h3>我是child組件</h3>
        <hr />
        {cloneElement}
      </div>
    );
  }
}
class App extends Component {
  state = {
    title: '我是child組件元素中間包裹的內(nèi)容'
  }
  render() {
    return (
      <div>
        <Child>
          <div>{this.state.title}</div>
        </Child>
      </div>
    );
  }
}
export default App;

1.2 React.Children.map方法

概述:

React.Children.map 方法,是 React 中的頂層 Api 方法,作用是遍歷 this.props.children 。

使用:

import React, { Component } from 'react';
class Child extends Component {
  state = {
    id: 1000
  }
  render() {
    // React中的頂層Api方法  遍歷 React.Children.map
    // 這個(gè)方法會自動地判斷傳入的數(shù)據(jù)是數(shù)組還是對象
    let cloneElement = React.Children.map(this.props.children, (child, index) => {
      // console.log(index, child);
      return React.cloneElement(child, {
        style: { color: 'red' },
        uid: this.state.id,
        onClick: () => console.log('我是事件', this.state.id)
      })
    })
    return (
      <div>
        {this.props.header}
        <h3>我是child組件</h3>
        <hr />
        {cloneElement}
        <hr />
        {this.props.footer}
      </div>
    );
  }
}
class App extends Component {
  render() {
    return (
      <div>
        <Child
          header={<div>我是頭部</div>}
          footer={<div>底部</div>}
        >
          <div>我是child組件元素中間包裹的內(nèi)容1</div>
          <div>我是child組件元素中間包裹的內(nèi)容2</div>
          <div>我是child組件元素中間包裹的內(nèi)容3</div>
        </Child>
      </div>
    );
  }
}
export default App;

2. 類型限制(prop-types)

概述:

對于組件來說,props 是外部傳入的,無法保證組件使用者傳入什么格式的數(shù)據(jù),簡單來說就是組件調(diào)用者可能不知道組件封裝者需要什么樣的數(shù)據(jù),如果傳入的數(shù)據(jù)不對,可能會導(dǎo)致程序異常,所以必須要對于 props 傳入的數(shù)據(jù)類型進(jìn)行校驗(yàn)。

React 版本從 15.5 之后就將 prop-types 移出了核心庫,使用它需要安裝:

yarn add prop-types

使用時(shí)還需要導(dǎo)入包:

import types from 'prop-types'

語法:

# 函數(shù)組件
function App(){}
// 驗(yàn)證規(guī)則
App.propTypes = {
    prop-name:PropTypes.string
}
# 類組件
class App extends Component{
}
App.propTypes = {
    prop-name:PropTypes.string
}
# 約束類型
- 類型: array、bool、func、number、object、string
- React元素類型:element
- 必填項(xiàng):isRequired
- 特定結(jié)構(gòu)的對象: shape({})

使用:

import React, { Component } from 'react';
import types from 'prop-types'
class Child extends Component {
  render() {
    console.log(this.props);
    return (
      <div>
        <h3>我是child組件 -- {this.props.sex}</h3>
      </div>
    );
  }
}
// 字段類型限制
Child.propTypes = {
  // age: number
  // 年齡的屬性它必須是一個(gè)數(shù)字類型,且此屬性必須要存在
  age: types.number.isRequired,
  // 在指定的值中間選擇其中一個(gè)
  sex: types.oneOf(['男', '女']),
  // 定義數(shù)組類型
  // arr: types.array
  // 定義數(shù)組類型,并且指定元素的類型
  arr: types.arrayOf(types.number),
  // 對象類型
  // obj: types.object
  obj: types.shape({
    // id: types.number,
    // 兩個(gè)類型選擇
    id: types.oneOfType([types.number, types.string]),
    name: types.string
  }),
  fn: types.func,
  // 自定義規(guī)則
  // props,當(dāng)前的屬性列表對象
  // key 當(dāng)前的屬性名稱
  phone: (props, key) => {
    // 得到屬性的值 
    let value = props[key]
    if (!/^1[3-9]\d{9}$/.test(value)) {
      // 如果不正確,一定要返回一個(gè)Error對象,這樣就可以在控制臺中看到信息,不要throw
      return new Error('有誤')
    }
  }
}
class App extends Component {
  fn = () => {
    console.log('fn');
  }
  render() {
    return (
      <div>
        <Child age={1} sex="男" arr={[1, 2, 3]} obj={{ id: 1, name: '張三' }} fn={this.fn} phone="13523253235" />
      </div>
    );
  }
}
export default App;

3. 默認(rèn)值(defaultProps)

概述:

如果 props 屬性沒有傳過數(shù)據(jù)來,為了不讓程序異常,可以設(shè)置其默認(rèn)值。

語法:

# 函數(shù)組件
function App(){}
# 類組件
class App extends Component {}
App.defaultProps = {
    title: '標(biāo)題'
}

使用:

import React, { Component } from 'react';
import types from 'prop-types'
class Child extends Component {
  // 這是類組件的獨(dú)有設(shè)置限制字段和默認(rèn)值的寫法,函數(shù)組件不能這么寫
  static propTypes = {
    age: types.number,
  }
  static defaultProps = {
    age: 2000
  }
  render() {
    // 在此處寫的默認(rèn),屬于開發(fā)者,自主去寫的,有可能有的開發(fā)者他就不定義
    // 所以需要用 defaultProps 強(qiáng)制加一個(gè)默認(rèn)值,并且 defaultProps 定義的默認(rèn)值優(yōu)先級更高
    let { age = 1 } = this.props
    console.log(age);
    return (
      <div>
        <h3>我是child組件</h3>
      </div>
    );
  }
}
// 此寫法是類組件和函數(shù)組件通用的寫法
// // 字段類型限制
// Child.propTypes = {
//   age: types.any,
// }
// // 默認(rèn)值 直接賦值就可以
// Child.defaultProps = {
//   age: 1000
// }
class App extends Component {
  render() {
    return (
      <div>
        <Child />
      </div>
    );
  }
}
export default App;

到此這篇關(guān)于React中props使用教程的文章就介紹到這了,更多相關(guān)React props內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 淺談React中組件間抽象

    淺談React中組件間抽象

    這篇文章主要介紹了淺談React中組件間抽象,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-01-01
  • 詳解react如何實(shí)現(xiàn)復(fù)合組件

    詳解react如何實(shí)現(xiàn)復(fù)合組件

    在一些react項(xiàng)目開發(fā)中,常常會出現(xiàn)一些組合的情況出現(xiàn),這篇文章主要為大家介紹了復(fù)合組件的具體實(shí)現(xiàn),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-10-10
  • 淺談React Native 傳參的幾種方式(小結(jié))

    淺談React Native 傳參的幾種方式(小結(jié))

    這篇文章主要介紹了淺談React Native 傳參的幾種方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • React獲取input值并提交的2種方法實(shí)例

    React獲取input值并提交的2種方法實(shí)例

    這篇文章主要給大家介紹了關(guān)于React獲取input值并提交的2種方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • react如何實(shí)現(xiàn)篩選條件組件

    react如何實(shí)現(xiàn)篩選條件組件

    這篇文章主要介紹了react如何實(shí)現(xiàn)篩選條件組件問題,具有很好的參考價(jià)價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • react清空ant.design中表單內(nèi)容的方法實(shí)現(xiàn)

    react清空ant.design中表單內(nèi)容的方法實(shí)現(xiàn)

    本文主要介紹了react清空ant.design中表單內(nèi)容的方法實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-12-12
  • 詳解React Hooks是如何工作的

    詳解React Hooks是如何工作的

    React Hooks是在React 16.8版本新增的特性,在我看了React官網(wǎng)和一些博客對React Hook的講解后還是覺得沒有g(shù)et到本質(zhì)。本篇博客通過手動實(shí)現(xiàn)useState()來了解Hook的原理和本質(zhì)。閱讀此篇博客的前提是你要知道一些 React Hooks的基本用法和使用規(guī)則,不然會看得云里霧里。
    2021-05-05
  • React?Context原理深入理解源碼示例分析

    React?Context原理深入理解源碼示例分析

    這篇文章主要為大家介紹了React?Context原理深入理解源碼示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • react+antd.3x實(shí)現(xiàn)ip輸入框

    react+antd.3x實(shí)現(xiàn)ip輸入框

    這篇文章主要為大家詳細(xì)介紹了react+antd.3x實(shí)現(xiàn)ip輸入框,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • react redux中如何獲取store數(shù)據(jù)并將數(shù)據(jù)渲染出來

    react redux中如何獲取store數(shù)據(jù)并將數(shù)據(jù)渲染出來

    這篇文章主要介紹了react redux中如何獲取store數(shù)據(jù)并將數(shù)據(jù)渲染出來,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08

最新評論

邹平县| 桐庐县| 当涂县| 桃园县| 页游| 佛教| 库车县| 峨边| 华池县| 伊宁县| 奎屯市| 巧家县| 万山特区| 疏附县| 凤翔县| 旬邑县| 宁明县| 永丰县| 涡阳县| 乐东| 都匀市| 长兴县| 富平县| 金华市| 海原县| 南漳县| 梨树县| 福泉市| 黄浦区| 富平县| 淮北市| 南木林县| 南雄市| 页游| 蓬安县| 河东区| 阳春市| 临夏县| 多伦县| 九江市| 衡山县|