這篇文章主要介紹了關於react 官網動畫庫(react-transition-group)的新寫法,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下
一、react-transition-group 一個官網提供的動畫過度庫。
搜尋了網路上關於react動畫的,很多的答案都是很久以前的了老版本了,而現在官方提供的是叫react-transition-group
它是以前兩個的合體版本,所以寫下這個記錄一下,同時也給一些需要的猿門給一些小的提示。
1、安裝
# npm npm install react-transition-group --save # yarn yarn add react-transition-group
而官方提供的三個組成Transition
,CSSTransition
,TransitonGroup
。
Transition
過渡元件(Transiton)允許您用一個簡單的宣告式API描述隨著時間的推移從一個元件狀態到另一個元件狀態的轉換。最常用的是用來動畫一個元件的安裝和卸載,但也可以用來描述在適當的過渡狀態。預設情況下,該元件不會更改其呈現的元件的行為,它只追蹤元件的「進入」和「退出」的狀態。由你來為這些狀態定義效果。 (翻譯)
實際的情況就是你如果只寫這個元件是沒有任何的效果的,就跟你寫一個p一樣。所以你需要給他們一些參數才可以。例如下面這個範例
//自己简单的封装了一个,该有的参数都由了,可以自行粘贴在自己的代码里面去试试。 class Fade extends React.Component { constructor(props) { super(props); } done =() => { // console.log('结束了') } addaddEndListener = (node) => { //原生时间transition运动的事件 node.addEventListener('transitionend', this.done, false); } // 三个进入状态的事件,可以做你想做的事情 onEnter = (node, isAppearing) => { console.log(isAppearing, 'onEnter') } onEntering = (node, isAppearing) => { console.log(isAppearing, 'onEntering') } onEntered = (node, isAppearing) => { console.log(isAppearing, 'onEntered') } // 三个退出的状态的事件 onExit = (node) => { console.log('onExit') } onExiting = () => { console.log('onExiting') } onExited = () => { console.log('onExited') this.props.self() } render() { const { in: inProp, dur} = this.props; const defaultStyle = { transition: `transform ${300}ms ease-in-out, opacity ${300}ms ease-in-out`, transform: 'translateX(100px)', opacity: '0' } const transitionStyles = { entering: { transform: 'translateX(100px)', opacity: '0'}, entered: { transform: 'translateX(0px)', opacity: '1' }, exiting: {transform: 'translateX(0px)', opacity: '1'}, exited: {transform: 'translateX(0px)', opacity: '0'} }; const duration = { enter: 300, exit: 300, } // 上面的都是基本参数,样式的转变以及时间的设定,具体的可以看官网文档 // 样式也可以写成className 例如<mycomponent></mycomponent> return ( <transition> { state => { console.log(state, '###') //你可以很直观的看到组件加载和卸载时候的状态 return( <p> {this.props.children} </p> ) } } </transition> ); } }
其中上面的狀態有四種:
entering entered exiting exited
元件的初始化狀態都停留在exited
上面就是寫的一個最基本的例子,以下是如何的呼叫
let num = 1; class Dnd extends React.Component { state = { ins: true, current: 1, dom: <p> ceshi weizhi {num} </p> } handle = (bool) => { this.setState({ test: !bool }) } end = () => { const that = this; num = num + 1; setTimeout(function () { that.setState({ test: true, dom: <p> 888888 {num} </p> }) }, 500) } render () { const { location } = this.props const { test } = this.state; return ( <mainlayout> <button>点击transition</button> <fade> {this.state.dom} </fade> </mainlayout> ) } } // 效果是每次点击按钮都会进行一次进场和出场的动画。也可以自行衍生。
这个组件大概就是这样的,这样适合写一个tab类型的页面,在切换的时候可以展示不同的dom
CSSTransition
此元件是在轉換的出現、進入、退出階段應用一對類別名稱(也就是className),靠這個來啟動CSS動畫。所以參數和平時的className不同,參數為:classNames
參數:(主要)in, timeout, unmountOnExit, classNames, 用法同Transition。看如下範例:
state = { star: false } <button>start</button> <csstransition> <p>⭐</p> </csstransition>
效果是點擊button 顯示星星,在點擊消失星星的動畫!
參數classNames="star"
, 元件會找對應狀態的className, 如下
.star { display: inline-block; margin-left: 0.5rem; transform: scale(1.25); } .star-enter { opacity: 0.01; transform: translateY(-100%) scale(0.75); } .star-enter-active { opacity: 1; transform: translateY(0%) scale(1.25); transition: all 300ms ease-out; } .star-exit { opacity: 1; transform: scale(1.25); } .star-exit-active { opacity: 0; transform: scale(4); transition: all 300ms ease-in; }
依序執行的順序是
1、星星显示 对应的class为star-enter star-enter-active 动画走完为star-enter-done 2、星星消失 对应的class为star-exit star-exit-active 动画走完为star-exit-done
如果按照官網的解釋就是如下, 有興趣的可以自行去試試。
classNames={{ appear: 'my-appear', appearActive: 'my-active-appear', enter: 'my-enter', enterActive: 'my-active-enter', enterDone: 'my-done-enter, exit: 'my-exit', exitActive: 'my-active-exit', exitDone: 'my-done-exit, }}
每個階段的鉤子函數同Transition.
TransitionGroup
一看group就知道肯定是列表形態的動畫了!但看了官網後知道,TransitionGroup不提供任何形式的動畫,具體的動畫取決與你包裹的Transition || CSSTransition的動畫,所以你可以在列表裡面做出不同類型的動畫出來。下面來看一個例子
class List extends React.Component { constructor(props) { super(props); this.state = { items: [ { id: 1, text: 'Buy eggs' }, { id: 2, text: 'Pay bills' }, { id: 3, text: 'Invite friends over' }, { id: 4, text: 'Fix the TV' }, ] } } render() { const { items } = this.state; return ( <p> <transitiongroup> {items.map(({ id, text }) => ( <csstransition> <p> <button> { this.setState(state => ({ items: state.items.filter( item => item.id !== id ), })); }} > × </button> {text} </p> </csstransition> ))} </transitiongroup> <button> { const text = prompt('Enter some text'); if (text) { this.setState(state => ({ items: [ ...state.items, { id: 1123, text }, ], })); } }} > Add Item </button> </p> ); } }
css
.fade-enter { opacity: 0.01; } .fade-enter-active { opacity: 1; transition: opacity 500ms ease-in; } .fade-exit { opacity: 1; } .fade-exit-active { opacity: 0.01; transition: opacity 500ms ease-in; }
效果是增加和刪除清單項目中的一個,產生漸入漸失的效果!說白了也就是多個Transition 或CSSTransition組合的效果。
但是也提供一些參數
1、component default 'p' 也就是TransitionGroup渲染出来的标签为p,也可以就行更改,例如component="span" 渲染出来的就是span标签了 2、children 相当于你给的组件,可以是字符串或者自定义组件等。 3、appear 写在TransitionGroup里面相当于开启或者禁止里面的Transition || CSSTransition 方便写的作用
三個元件大概的特性就是這些。剩下的全靠自己開發了!後續會錄入一些小的例子來講解,敬請期待。 。 。 。
以上就是本文的全部內容,希望對大家的學習有所幫助,更多相關內容請關注PHP中文網!
相關推薦:
原生JS基於window.scrollTo()封裝垂直捲動動畫工具函數
以上是react 官網動畫庫(react-transition-group)的新寫法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

引言我知道你可能會覺得奇怪,JavaScript、C 和瀏覽器之間到底有什麼關係?它們之間看似毫無關聯,但實際上,它們在現代網絡開發中扮演著非常重要的角色。今天我們就來深入探討一下這三者之間的緊密聯繫。通過這篇文章,你將了解到JavaScript如何在瀏覽器中運行,C 在瀏覽器引擎中的作用,以及它們如何共同推動網頁的渲染和交互。 JavaScript與瀏覽器的關係我們都知道,JavaScript是前端開發的核心語言,它直接在瀏覽器中運行,讓網頁變得生動有趣。你是否曾經想過,為什麼JavaScr

Node.js擅長於高效I/O,這在很大程度上要歸功於流。 流媒體匯總處理數據,避免內存過載 - 大型文件,網絡任務和實時應用程序的理想。將流與打字稿的類型安全結合起來創建POWE

Python和JavaScript在性能和效率方面的差異主要體現在:1)Python作為解釋型語言,運行速度較慢,但開發效率高,適合快速原型開發;2)JavaScript在瀏覽器中受限於單線程,但在Node.js中可利用多線程和異步I/O提升性能,兩者在實際項目中各有優勢。

JavaScript起源於1995年,由布蘭登·艾克創造,實現語言為C語言。 1.C語言為JavaScript提供了高性能和系統級編程能力。 2.JavaScript的內存管理和性能優化依賴於C語言。 3.C語言的跨平台特性幫助JavaScript在不同操作系統上高效運行。

JavaScript在瀏覽器和Node.js環境中運行,依賴JavaScript引擎解析和執行代碼。 1)解析階段生成抽象語法樹(AST);2)編譯階段將AST轉換為字節碼或機器碼;3)執行階段執行編譯後的代碼。

Python和JavaScript的未來趨勢包括:1.Python將鞏固在科學計算和AI領域的地位,2.JavaScript將推動Web技術發展,3.跨平台開發將成為熱門,4.性能優化將是重點。兩者都將繼續在各自領域擴展應用場景,並在性能上有更多突破。

Python和JavaScript在開發環境上的選擇都很重要。 1)Python的開發環境包括PyCharm、JupyterNotebook和Anaconda,適合數據科學和快速原型開發。 2)JavaScript的開發環境包括Node.js、VSCode和Webpack,適用於前端和後端開發。根據項目需求選擇合適的工具可以提高開發效率和項目成功率。

是的,JavaScript的引擎核心是用C語言編寫的。 1)C語言提供了高效性能和底層控制,適合JavaScript引擎的開發。 2)以V8引擎為例,其核心用C 編寫,結合了C的效率和麵向對象特性。 3)JavaScript引擎的工作原理包括解析、編譯和執行,C語言在這些過程中發揮關鍵作用。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Dreamweaver CS6
視覺化網頁開發工具

記事本++7.3.1
好用且免費的程式碼編輯器

Atom編輯器mac版下載
最受歡迎的的開源編輯器

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器