欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

React中實(shí)現(xiàn)插槽效果的方案詳解

 更新時(shí)間:2022年09月27日 14:36:09   作者:林有酒  
在React中是沒(méi)有插槽的概念的, 或者說(shuō)在React中是不需要插槽的, 因?yàn)镽eact對(duì)于這種需要插槽的情況非常靈活,本文給大家分享兩種方案實(shí)現(xiàn),分別是children實(shí)現(xiàn)插槽和props實(shí)現(xiàn)插槽,結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧

React實(shí)現(xiàn)插槽

在開(kāi)發(fā)中,我們抽取了一個(gè)組件,但是為了讓這個(gè)組件具備更強(qiáng)的通用性,我們不能將組件中的內(nèi)容限制為固定的div、span等等這些元素。

我們應(yīng)該讓使用者可以決定某一塊區(qū)域到底存放什么內(nèi)容

在這里插入圖片描述

這種需求在Vue當(dāng)中有一個(gè)固定的做法是通過(guò)slot來(lái)完成的,React呢?

在React中是沒(méi)有插槽的概念的, 或者說(shuō)在React中是不需要插槽的, 因?yàn)镽eact對(duì)于這種需要插槽的情況非常靈活,有兩種方案可以實(shí)現(xiàn):

組件的children子元素;

props屬性傳遞React元素;

children實(shí)現(xiàn)插槽

每個(gè)組件都可以獲取到 props.children:它包含組件的開(kāi)始標(biāo)簽和結(jié)束標(biāo)簽之間的內(nèi)容。

例如我們實(shí)現(xiàn)一個(gè)navbar, 要求左邊, 中間, 右邊的內(nèi)容是不固定的, 由使用者來(lái)決定到底放什么

在父組件的子組件標(biāo)簽中寫(xiě)入要插入到子組件的元素

import React, { Component } from 'react'
import NavBar from './c-cpns/NavBar'

export class App extends Component {
  render() {
    return (
      <div>
        {/* 父組件將要插入到子組件的元素寫(xiě)到組件標(biāo)簽中 */}
        <NavBar>
          <button>按鈕</button>
          <h2>標(biāo)題</h2>
          <i>斜體</i>
        </NavBar>
      </div>
    )
  }
}

export default App

在子組件中通過(guò)this.props可以獲取到一個(gè)children屬性, 該屬性中包含子組件標(biāo)簽開(kāi)始到結(jié)束之間的內(nèi)容

import React, { Component } from 'react'
import './style.css'

export class NavBar extends Component {
  render() {
    // 在子組件通過(guò)props中的children, 獲取到要插入的元素
    const { children } = this.props
    return (
      <div className='nav-bar'>
        <div className='left'>
          {children[0]}
        </div>
        <div className='center'>
          {children[1]}
        </div>
        <div className='right'>
          {children[2]}
        </div>
      </div>
    )
  }
}

export default NavBar

注意: 如果children中有多個(gè)元素, 那么children是一個(gè)數(shù)組, 數(shù)組中存放著所有內(nèi)容; 如果只插入一個(gè)元素到子組件中, 那么children本身就是插入的該元素, 如下:

父組件中只插入了一個(gè)元素

return (
  <div>
    {/* 父組件將要插入到子組件的元素寫(xiě)到組件標(biāo)簽中 */}
    <NavBar>
      <button>按鈕</button>
    </NavBar>
  </div>
)

子組件直接使用children即可

render() {
  // 在子組件通過(guò)props中的children, 獲取到要插入的元素
  const { children } = this.props
  return (
    <div className='nav-bar'>
      <div className='left'>
        {children}
      </div>
    </div>
  )
}

props實(shí)現(xiàn)插槽

通過(guò)children實(shí)現(xiàn)的方案雖然可行,但是有一個(gè)弊端:通過(guò)索引值獲取傳入的元素很容易出錯(cuò),不能精準(zhǔn)的獲取傳入的原生;

而且對(duì)順序有嚴(yán)格的要求

另外一個(gè)種方案就是使用 props 實(shí)現(xiàn)(這個(gè)方案也是開(kāi)發(fā)中使用的比較多的方案, 個(gè)人更推薦)

我們之間通過(guò)具體的屬性名,可以讓我們?cè)趥魅牒瞳@取時(shí)更加的精準(zhǔn);

首先在父組件通過(guò)props的方式將要插入的元素傳入到子組件中

render() {
  // 在子組件通過(guò)props中的children, 獲取到要插入的元素
  const { children } = this.props
  return (
    <div className='nav-bar'>
      <div className='left'>
        {children}
      </div>
    </div>
  )
}

再在子組件中獲取到傳遞的數(shù)據(jù)進(jìn)行展示

import React, { Component } from 'react'

export class NavBarTow extends Component {
  render() {
    // 在子組件中獲取到父組件傳遞過(guò)來(lái)的數(shù)據(jù)
    const { leftSlot, centerSlot, rightSlot } = this.props

    return (
      <div className='nav-bar'>
        {/* 將傳遞過(guò)來(lái)的數(shù)據(jù)進(jìn)行展示 */}
        <div className='left'>
          {leftSlot}
        </div>
        <div className='center'>
          {centerSlot}
        </div>
        <div className='right'>
          {rightSlot}
        </div>
      </div>
    )
  }
}

export default NavBarTow

到此這篇關(guān)于React中實(shí)現(xiàn)插槽效果的方案的文章就介紹到這了,更多相關(guān)React實(shí)現(xiàn)插槽內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • React組件useReducer的講解與使用

    React組件useReducer的講解與使用

    在React函數(shù)式組件中,我們可以通過(guò)useState()來(lái)創(chuàng)建state,這種state創(chuàng)建方式會(huì)給我們返回兩個(gè)東西state和setState()。
    2023-04-04
  • react native帶索引的城市列表組件的實(shí)例代碼

    react native帶索引的城市列表組件的實(shí)例代碼

    本篇文章主要介紹了react-native城市列表組件的實(shí)例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-08-08
  • 關(guān)于react的代理配置(可配置多個(gè)代理)

    關(guān)于react的代理配置(可配置多個(gè)代理)

    這篇文章主要介紹了關(guān)于react的代理配置(可配置多個(gè)代理),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • React?Hook?四種組件優(yōu)化總結(jié)

    React?Hook?四種組件優(yōu)化總結(jié)

    這篇文章主要介紹了React?Hook四種組件優(yōu)化總結(jié),文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)孩子,需要的朋友可以參考一下
    2022-07-07
  • React Native 真機(jī)斷點(diǎn)調(diào)試+跨域資源加載出錯(cuò)問(wèn)題的解決方法

    React Native 真機(jī)斷點(diǎn)調(diào)試+跨域資源加載出錯(cuò)問(wèn)題的解決方法

    下面小編就為大家分享一篇React Native 真機(jī)斷點(diǎn)調(diào)試+跨域資源加載出錯(cuò)問(wèn)題的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-01-01
  • react-router-dom v6版本實(shí)現(xiàn)Tabs路由緩存切換功能

    react-router-dom v6版本實(shí)現(xiàn)Tabs路由緩存切換功能

    今天有人問(wèn)我怎么實(shí)現(xiàn)React-Router-dom類(lèi)似標(biāo)簽頁(yè)緩存,很久以前用的是react-router v5那個(gè)比較容易實(shí)現(xiàn),v6變化挺大,但了解react的機(jī)制和react-router的機(jī)制就容易了,本文介紹react-router-dom v6版本實(shí)現(xiàn)Tabs路由緩存切換,感興趣的朋友一起看看吧
    2023-10-10
  • react?定位組件源碼解析

    react?定位組件源碼解析

    這篇文章主要為大家介紹了react定位組件源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • React-redux?中useSelector使用源碼分析

    React-redux?中useSelector使用源碼分析

    在一個(gè) action 被分發(fā)(dispatch) 后,useSelector() 默認(rèn)對(duì) select 函數(shù)的返回值進(jìn)行引用比較 ===,并且僅在返回值改變時(shí)觸發(fā)重渲染,,這篇文章主要介紹了React-redux?中useSelector使用,需要的朋友可以參考下
    2023-10-10
  • react-native封裝插件swiper的使用方法

    react-native封裝插件swiper的使用方法

    這篇文章主要介紹了react-native封裝插件swiper的使用方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-03-03
  • React?正確使用useCallback?useMemo的方式

    React?正確使用useCallback?useMemo的方式

    這篇文章主要介紹了React?正確使用useCallback?useMemo的方式,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下
    2022-08-08

最新評(píng)論