亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

用React實(shí)現(xiàn)點(diǎn)擊切換的標(biāo)簽頁

codeKK / 1453人閱讀

摘要:四總結(jié)上面一系列的操作最終的結(jié)果都需要用來反應(yīng)出來,所以關(guān)鍵點(diǎn)是如何在中使用來動(dòng)態(tài)生成接下來的改進(jìn)實(shí)現(xiàn)可以滑動(dòng)的標(biāo)簽頁

一、首先是Showcase

See the Pen react-tabs by Wang Chao (@charleyw) on CodePen.

二、如何實(shí)現(xiàn)

既然用React寫,那么它就必然是一個(gè)組件,首先考慮你怎么使用這個(gè)組件,也就是這個(gè)組件的接口是怎么樣的。


  
    

這個(gè)TabsControl作為父組件,它來控制Tab的如何切換,Tab是用來包裹真正要顯示的內(nèi)容的,它的name屬性是這個(gè)標(biāo)簽頁的名字,會(huì)被顯示在標(biāo)簽頁的標(biāo)題欄上。

三、創(chuàng)建基本元素

按照之前的想法,我們用Tab定義了很多個(gè)標(biāo)簽頁,我們需要根據(jù)這些定義生成標(biāo)簽頁的標(biāo)題欄和內(nèi)容。

1. 遍歷this.props.children動(dòng)態(tài)生成標(biāo)題欄

this.props.children是React內(nèi)建的一個(gè)屬性,用來獲取組件的子元素。因?yàn)樽釉赜锌赡苁荗bject或者Array,所以React提供了一些處理children的輔助方法用來遍歷:React.Children.map

那么動(dòng)態(tài)生成標(biāo)題的代碼可能是這樣子的:

React.Children.map(this.props.children, (element, index) => {
    return (
{element.props.name}
)
2. 再用同樣方法生成標(biāo)簽頁內(nèi)容
React.Children.map(this.props.children, element => {
    return (element)
})

組合起來就是TabsControl的實(shí)現(xiàn):

let TabsControl = React.createClass({
  render: function () {
    let that = this;
    let {baseWidth} = this.props;
    let childrenLength = this.props.children.length;
    return (
      
{React.Children.map(this.props.children, element => { return (element) })}
) } });

加上一些css就能看到一個(gè)標(biāo)簽頁的雛形了。

三、實(shí)現(xiàn)標(biāo)簽頁切換

這里要出現(xiàn)React最重要的概念了state,state是一個(gè)Javascript的Object,它是用來表示組件的當(dāng)前狀態(tài)的,如果用TabsControl舉例的話,它的state可以是當(dāng)前處于激活狀態(tài)的標(biāo)簽頁編號(hào)(當(dāng)然,如果你想的話也可以保存標(biāo)簽頁的內(nèi)容)。
React提供了一個(gè)方法setState()讓你可以改變state的值。每次調(diào)用setState()都會(huì)觸發(fā)組件的render(),也就是說會(huì)把組件所代表的DOM更新到state所代表的狀態(tài)。

所以實(shí)現(xiàn)切換的關(guān)鍵如下:

state保存當(dāng)前處于激活狀態(tài)的標(biāo)簽頁的編號(hào)

點(diǎn)擊標(biāo)題的時(shí)候調(diào)用setState()更新激活的標(biāo)簽頁編號(hào)

render()的時(shí)候,在遍歷this.props.children的時(shí)候把編號(hào)與state中編號(hào)一致的元素標(biāo)記為active

用css將非active的元素隱藏起來

所以代碼是這樣的:

let TabsControl = React.createClass({
  getInitialState: function(){
    return {currentIndex: 0}
  },
  
  getTitleItemCssClasses: function(index){
    return index === this.state.currentIndex ? "tab-title-item active" : "tab-title-item";
  },
  
  getContentItemCssClasses: function(index){
    return index === this.state.currentIndex ? "tab-content-item active" : "tab-content-item";
  },
  
  render: function(){
    let that = this;
    let {baseWidth} = this.props;
    let childrenLength = this.props.children.length;
    return (
      
{React.Children.map(this.props.children, (element, index) => { return (
{element}
) })}
) } });

getInitialState:是組件的初始化狀態(tài),默認(rèn)是第一個(gè)標(biāo)簽頁處于激活狀態(tài)。
getTitleItemCssClasses:判斷當(dāng)前標(biāo)簽和state中保存的標(biāo)簽編號(hào)是否一直,是則標(biāo)識(shí)為active。
getContentItemCssClasses:同上。
onClick={() => {this.setState({currentIndex: index})}}:標(biāo)簽頁標(biāo)題綁定了點(diǎn)擊事件,每次點(diǎn)擊都會(huì)更新state保存的標(biāo)簽頁編號(hào),然后觸發(fā)render()方法重繪標(biāo)簽頁。

四、總結(jié)

上面一系列的操作最終的結(jié)果都需要用render()來反應(yīng)出來,所以關(guān)鍵點(diǎn)是如何在render()中使用state來動(dòng)態(tài)生成DOM.

接下來的改進(jìn)

實(shí)現(xiàn)可以滑動(dòng)的標(biāo)簽頁

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/49703.html

相關(guān)文章

  • React實(shí)現(xiàn)點(diǎn)擊切換標(biāo)簽

    摘要:四總結(jié)上面一系列的操作最終的結(jié)果都需要用來反應(yīng)出來,所以關(guān)鍵點(diǎn)是如何在中使用來動(dòng)態(tài)生成接下來的改進(jìn)實(shí)現(xiàn)可以滑動(dòng)的標(biāo)簽頁 一、首先是Showcase See the Pen react-tabs by Wang Chao (@charleyw) on CodePen. 二、如何實(shí)現(xiàn) 既然用React寫,那么它就必然是一個(gè)組件,首先考慮你怎么使用這個(gè)組件,也就是這個(gè)組件的接口是怎么樣的。 ...

    xushaojieaaa 評(píng)論0 收藏0
  • 手把手教你React實(shí)現(xiàn)一個(gè)簡(jiǎn)單個(gè)人博客

    摘要:官方文檔中文文檔基本使用注意一定要在根目錄的中聲明,要不然點(diǎn)擊任何鏈接都無法跳轉(zhuǎn)。官方文檔中文文檔簡(jiǎn)單的來說,每一次的修改狀態(tài)都需要觸發(fā),然而其實(shí)項(xiàng)目中我現(xiàn)在還沒用到修改數(shù)據(jù)。。。 學(xué)習(xí) React 的過程中實(shí)現(xiàn)了一個(gè)個(gè)人主頁,沒有復(fù)雜的實(shí)現(xiàn)和操作,適合入門 ~ 原文地址:https://github.com/axuebin/react-blog/issues/17 這個(gè)項(xiàng)目其實(shí)功能...

    zhaochunqi 評(píng)論0 收藏0
  • 國內(nèi)存在感最低前端API——瀏覽器路由

    摘要:最新一直在看關(guān)于和路由這塊的知識(shí),最終發(fā)現(xiàn)這些路由框架的模塊功能的實(shí)現(xiàn)都是基于瀏覽器原生路由的。在瀏覽器中實(shí)現(xiàn)前端路由主要有兩種方式一個(gè)是我們常用的,另一個(gè)是提供的。該對(duì)象的和分別表示的各個(gè)部分,它們因此被稱為分解屬性。 最新一直在看關(guān)于 Vue 和 React 路由這塊的知識(shí),最終發(fā)現(xiàn)這些路由框架的模塊功能的實(shí)現(xiàn)都是基于瀏覽器原生路由 API?的。本著追根溯源的初心,于是就想著將瀏覽...

    U2FsdGVkX1x 評(píng)論0 收藏0
  • 國內(nèi)存在感最低前端API——瀏覽器路由

    摘要:最新一直在看關(guān)于和路由這塊的知識(shí),最終發(fā)現(xiàn)這些路由框架的模塊功能的實(shí)現(xiàn)都是基于瀏覽器原生路由的。在瀏覽器中實(shí)現(xiàn)前端路由主要有兩種方式一個(gè)是我們常用的,另一個(gè)是提供的。該對(duì)象的和分別表示的各個(gè)部分,它們因此被稱為分解屬性。 最新一直在看關(guān)于 Vue 和 React 路由這塊的知識(shí),最終發(fā)現(xiàn)這些路由框架的模塊功能的實(shí)現(xiàn)都是基于瀏覽器原生路由 API?的。本著追根溯源的初心,于是就想著將瀏覽...

    tolerious 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<