要在React中使用CSS动画更改列表顺序,可以使用CSS transition-group
属性
react-transition-group
。如果没有,请运行以下命令:npm install react-transition-group
CSSTransitionGroup
:import React, { useState } from 'react';
import { CSSTransitionGroup } from 'react-transition-group';
import './App.css';
function App() {
const [items, setItems] = useState([
{ id: 1, text: 'Item 1' },
{ id: 2, text: 'Item 2' },
{ id: 3, text: 'Item 3' },
]);
const moveItem = (id, direction) => {
const sortedItems = [...items].sort((a, b) => {
if (direction === 'asc') {
return a.id - b.id;
} else {
return b.id - a.id;
}
});
setItems(sortedItems);
};
return (
<div className="App">
<button onClick={() => moveItem(null, 'asc')}>升序</button>
<button onClick={() => moveItem(null, 'desc')}>降序</button>
<CSSTransitionGroup
transitionName="list"
transitionEnterTimeout={500}
transitionLeaveTimeout={500}
>
{items.map((item) => (
<div key={item.id} className="list-item">
{item.text}
</div>
))}
</CSSTransitionGroup>
</div>
);
}
export default App;
.list-item {
display: inline-block;
margin-right: 10px;
background-color: lightblue;
padding: 10px;
border-radius: 5px;
transition: all 0.5s ease-in-out;
}
.list-enter {
opacity: 0;
transform: translateY(-20px);
}
.list-enter-active {
opacity: 1;
transform: translateY(0);
}
.list-exit {
opacity: 1;
transform: translateY(0);
}
.list-exit-active {
opacity: 0;
transform: translateY(20px);
}
transitionName
属性值与CSS中的类名前缀匹配(例如.list-enter
,.list-enter-active
等)。在这个示例中,我们使用了一个简单的淡入淡出和移动的动画效果。您可以根据自己的需求来调整动画效果。
现在,当您点击“升序”或“降序”按钮时,列表顺序会以动画的形式进行更改。
领取专属 10元无门槛券
手把手带您无忧上云