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

react組件中過(guò)渡動(dòng)畫(huà)的問(wèn)題解決

 更新時(shí)間:2022年09月08日 08:30:31   作者:別救了這猴子廢了  
這篇文章主要為大家介紹了react組件中過(guò)渡動(dòng)畫(huà)的問(wèn)題解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

一、是什么

在日常開(kāi)發(fā)中,頁(yè)面切換時(shí)的轉(zhuǎn)場(chǎng)動(dòng)畫(huà)是比較基礎(chǔ)的一個(gè)場(chǎng)景

當(dāng)一個(gè)組件在顯示與消失過(guò)程中存在過(guò)渡動(dòng)畫(huà),可以很好的增加用戶(hù)的體驗(yàn)

react中實(shí)現(xiàn)過(guò)渡動(dòng)畫(huà)效果會(huì)有很多種選擇,如react-transition-groupreact-motion,Animated,以及原生的CSS都能完成切換動(dòng)畫(huà)

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

react中,react-transition-group是一種很好的解決方案,其為元素添加enter,enter-active,exit,exit-active這一系列勾子

可以幫助我們方便的實(shí)現(xiàn)組件的入場(chǎng)和離場(chǎng)動(dòng)畫(huà)

其主要提供了三個(gè)主要的組件:

  • CSSTransition:在前端開(kāi)發(fā)中,結(jié)合 CSS 來(lái)完成過(guò)渡動(dòng)畫(huà)效果
  • SwitchTransition:兩個(gè)組件顯示和隱藏切換時(shí),使用該組件
  • TransitionGroup:將多個(gè)動(dòng)畫(huà)組件包裹在其中,一般用于列表中元素的動(dòng)畫(huà)

CSSTransition

其實(shí)現(xiàn)動(dòng)畫(huà)的原理在于,當(dāng)CSSTransitionin屬性置為true時(shí),CSSTransition首先會(huì)給其子組件加上xxx-enterxxx-enter-activeclass執(zhí)行動(dòng)畫(huà)

當(dāng)動(dòng)畫(huà)執(zhí)行結(jié)束后,會(huì)移除兩個(gè)class,并且添加-enter-doneclass

所以可以利用這一點(diǎn),通過(guò)csstransition屬性,讓元素在兩個(gè)狀態(tài)之間平滑過(guò)渡,從而得到相應(yīng)的動(dòng)畫(huà)效果

當(dāng)in屬性置為false時(shí),CSSTransition會(huì)給子組件加上xxx-exitxxx-exit-activeclass,然后開(kāi)始執(zhí)行動(dòng)畫(huà),當(dāng)動(dòng)畫(huà)結(jié)束后,移除兩個(gè)class,然后添加-enter-doneclass

如下例子:

export default class App2 extends React.PureComponent {
  state = {show: true};
  onToggle = () => this.setState({show: !this.state.show});
  render() {
    const {show} = this.state;
    return (
      <div className={'container'}>
        <div className={'square-wrapper'}>
          <CSSTransition
            in={show}
            timeout={500}
            classNames={'fade'}
            unmountOnExit={true}
          >
            <div className={'square'} />
          </CSSTransition>
        </div>
        <Button onClick={this.onToggle}>toggle</Button>
      </div>
    );
  }
}

對(duì)應(yīng)css樣式如下:

.fade-enter {
  opacity: 0;
  transform: translateX(100%);
}
.fade-enter-active {
  opacity: 1;
  transform: translateX(0);
  transition: all 500ms;
}
.fade-exit {
  opacity: 1;
  transform: translateX(0);
}
.fade-exit-active {
  opacity: 0;
  transform: translateX(-100%);
  transition: all 500ms;
}

SwitchTransition

SwitchTransition可以完成兩個(gè)組件之間切換的炫酷動(dòng)畫(huà)

比如有一個(gè)按鈕需要在onoff之間切換,我們希望看到on先從左側(cè)退出,off再?gòu)挠覀?cè)進(jìn)入

SwitchTransition中主要有一個(gè)屬性mode,對(duì)應(yīng)兩個(gè)值:

  • in-out:表示新組件先進(jìn)入,舊組件再移除;
  • out-in:表示就組件先移除,新組建再進(jìn)入

SwitchTransition組件里面要有CSSTransition,不能直接包裹你想要切換的組件

里面的CSSTransition組件不再像以前那樣接受in屬性來(lái)判斷元素是何種狀態(tài),取而代之的是key屬性

下面給出一個(gè)按鈕入場(chǎng)和出場(chǎng)的示例,如下:

import { SwitchTransition, CSSTransition } from "react-transition-group";
export default class SwitchAnimation extends PureComponent {
  constructor(props) {
    super(props);
    this.state = {
      isOn: true
    }
  }
  render() {
    const {isOn} = this.state;
    return (
      <SwitchTransition mode="out-in">
        <CSSTransition classNames="btn"
                       timeout={500}
                       key={isOn ? "on" : "off"}>
          {
          <button onClick={this.btnClick.bind(this)}>
            {isOn ? "on": "off"}
          </button>
        }
        </CSSTransition>
      </SwitchTransition>
    )
  }
  btnClick() {
    this.setState({isOn: !this.state.isOn})
  }
}

css文件對(duì)應(yīng)如下:

.btn-enter {
  transform: translate(100%, 0);
  opacity: 0;
}
.btn-enter-active {
  transform: translate(0, 0);
  opacity: 1;
  transition: all 500ms;
}
.btn-exit {
  transform: translate(0, 0);
  opacity: 1;
}
.btn-exit-active {
  transform: translate(-100%, 0);
  opacity: 0;
  transition: all 500ms;
}

TransitionGroup

當(dāng)有一組動(dòng)畫(huà)的時(shí)候,就可將這些CSSTransition放入到一個(gè)TransitionGroup中來(lái)完成動(dòng)畫(huà)

同樣CSSTransition里面沒(méi)有in屬性,用到了key屬性

TransitionGroup在感知children發(fā)生變化的時(shí)候,先保存移除的節(jié)點(diǎn),當(dāng)動(dòng)畫(huà)結(jié)束后才真正移除

其處理方式如下:

  • 插入的節(jié)點(diǎn),先渲染dom,然后再做動(dòng)畫(huà)
  • 刪除的節(jié)點(diǎn),先做動(dòng)畫(huà),然后再刪除dom

如下:

import React, { PureComponent } from 'react'
import { CSSTransition, TransitionGroup } from 'react-transition-group';
export default class GroupAnimation extends PureComponent {
  constructor(props) {
    super(props);
    this.state = {
      friends: []
    }
  }
  render() {
    return (
      <div>
        <TransitionGroup>
          {
            this.state.friends.map((item, index) => {
              return (
                <CSSTransition classNames="friend" timeout={300} key={index}>
                  <div>{item}</div>
                </CSSTransition>
              )
            })
          }
        </TransitionGroup>
        <button onClick={e => this.addFriend()}>+friend</button>
      </div>
    )
  }
  addFriend() {
    this.setState({
      friends: [...this.state.friends, "coderwhy"]
    })
  }
}

對(duì)應(yīng)css如下:

.friend-enter {
    transform: translate(100%, 0);
    opacity: 0;
}
.friend-enter-active {
    transform: translate(0, 0);
    opacity: 1;
    transition: all 500ms;
}
.friend-exit {
    transform: translate(0, 0);
    opacity: 1;
}
.friend-exit-active {
    transform: translate(-100%, 0);
    opacity: 0;
    transition: all 500ms;
}

以上就是react組件中過(guò)渡動(dòng)畫(huà)的問(wèn)題解決的詳細(xì)內(nèi)容,更多關(guān)于react組件過(guò)渡動(dòng)畫(huà) 的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • React自定義實(shí)現(xiàn)useWatch鉤子的示例

    React自定義實(shí)現(xiàn)useWatch鉤子的示例

    React中實(shí)現(xiàn)類(lèi)似Vue watch的useWatch Hook,包含基礎(chǔ)監(jiān)聽(tīng)、立即執(zhí)行、動(dòng)態(tài)停止及深度比較四種方式,適用于不同場(chǎng)景,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-07-07
  • React類(lèi)組件和函數(shù)組件的所有核心區(qū)別及說(shuō)明

    React類(lèi)組件和函數(shù)組件的所有核心區(qū)別及說(shuō)明

    這篇文章主要介紹了React類(lèi)組件和函數(shù)組件的所有核心區(qū)別及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2026-03-03
  • React?組件之props屬性的使用

    React?組件之props屬性的使用

    在React中,props是組件之間傳遞數(shù)據(jù)的一種方式,它是?React?組件的基礎(chǔ),用于將數(shù)據(jù)從父組件傳遞到子組件,本文就來(lái)詳細(xì)的介紹一下,感興趣的可以了解一下
    2025-09-09
  • 基于React編寫(xiě)一個(gè)全局Toast的示例代碼

    基于React編寫(xiě)一個(gè)全局Toast的示例代碼

    前些日子在做項(xiàng)目的時(shí)候,需要封裝一個(gè)Toast組件,我想起之前用過(guò)的庫(kù),只要在入口文件中引入就可以在全局中使用,還是很方便的,借這次機(jī)會(huì)也來(lái)實(shí)現(xiàn)一下,所以本文介紹了React中如何編寫(xiě)一個(gè)全局Toast,需要的朋友可以參考下
    2024-05-05
  • react中(含hooks)同步獲取state值的方式

    react中(含hooks)同步獲取state值的方式

    這篇文章主要介紹了react(含hooks)中同步獲取state值的方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • reactrouter dom庫(kù)作用小結(jié)

    reactrouter dom庫(kù)作用小結(jié)

    `react-router-dom`是React應(yīng)用中用于實(shí)現(xiàn)頁(yè)面導(dǎo)航、嵌套路由、布局管理以及代碼分割和懶加載的重要庫(kù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-11-11
  • React?Hook之使用State?Hook的方法

    React?Hook之使用State?Hook的方法

    這篇文章主要為大家詳細(xì)介紹了React使用State?Hook的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03
  • React路由鑒權(quán)的實(shí)現(xiàn)方法

    React路由鑒權(quán)的實(shí)現(xiàn)方法

    這篇文章主要介紹了React路由鑒權(quán)的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • 一文掌握React?組件樹(shù)遍歷技巧

    一文掌握React?組件樹(shù)遍歷技巧

    這篇文章主要為大家介紹了React?組件樹(shù)遍歷技巧的掌握,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • React中useState的使用方法及注意事項(xiàng)

    React中useState的使用方法及注意事項(xiàng)

    useState通過(guò)在函數(shù)組件里調(diào)用它來(lái)給組件添加一些內(nèi)部state,下面這篇文章主要給大家介紹了關(guān)于React中useState的使用方法及注意事項(xiàng)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08

最新評(píng)論

临颍县| 肃南| 墨玉县| 哈巴河县| 九台市| 梓潼县| 苗栗市| 平湖市| 岚皋县| 沾益县| 恩施市| 大竹县| 霸州市| 敦化市| 长阳| 红安县| 什邡市| 潼关县| 温州市| 卢氏县| 雷波县| 百色市| 唐河县| 南康市| 镇原县| 益阳市| 泸定县| 鹰潭市| 多伦县| 房产| 安龙县| 织金县| 法库县| 工布江达县| 慈利县| 叙永县| 阿拉善盟| 喀什市| 荣成市| 花莲市| 贡嘎县|