国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

codeKK / 1398人閱讀

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

一、首先是Showcase

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

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

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


  
    

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

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

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

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

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

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

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

組合起來(lái)就是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)簽頁(yè)的雛形了。

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

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

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

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

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

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

用css將非active的元素隱藏起來(lái)

所以代碼是這樣的:

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

四、總結(jié)

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

接下來(lái)的改進(jìn)

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

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

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

相關(guān)文章

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

    摘要:四總結(jié)上面一系列的操作最終的結(jié)果都需要用來(lái)反應(yīng)出來(lái),所以關(guān)鍵點(diǎn)是如何在中使用來(lái)動(dòng)態(tài)生成接下來(lái)的改進(jìn)實(shí)現(xiàn)可以滑動(dòng)的標(biāo)簽頁(yè) 一、首先是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)擊任何鏈接都無(wú)法跳轉(zhuǎn)。官方文檔中文文檔簡(jiǎn)單的來(lái)說(shuō),每一次的修改狀態(tài)都需要觸發(fā),然而其實(shí)項(xiàng)目中我現(xiàn)在還沒用到修改數(shù)據(jù)。。。 學(xué)習(xí) React 的過程中實(shí)現(xiàn)了一個(gè)個(gè)人主頁(yè),沒有復(fù)雜的實(shí)現(xiàn)和操作,適合入門 ~ 原文地址:https://github.com/axuebin/react-blog/issues/17 這個(gè)項(xiàng)目其實(shí)功能...

    zhaochunqi 評(píng)論0 收藏0
  • 國(guó)內(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
  • 國(guó)內(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元查看
<