react-flip-move结合array-move实现前端列表置顶效果

你有没有遇到这样的需求?点击左侧列表项,则像聊天会话窗口一样将被点击的列表项置顶。

如果只是单纯的置顶的话,直接使用array-move就可以实现了,但置顶效果多少有点突兀~

先上代码,直接使用array-move的情况(说明:本文只展示功能实现核心代码)

javascript 复制代码
import { useState } from 'react';
import { arrayMoveImmutable } from 'array-move';

const [list, setList] = useState([
	{
		id: 1,
		name: '小米手机'
	},
	{
		id: 2,
		name: '自然堂'
	},
	{
		id:3,
		name: '欧莱雅'
	},
	{
		id: 4,
		name: '新的会话'
	},
	{
		id: 5,
		name: '新的会话'
	}
])

const getIndex = (item) => {
  return list.findIndex((current) => current.id === item.id)
}

const handleSelectItem = (listItem) => {
  const currentIndex = getIndex(listItem)
  // 会话置顶
  const newList = arrayMoveImmutable(list, currentIndex,  0);
  setList(newList)
}

return (
	<div className={styles.list}>
		{
	       list.map((item) => {
	       return (
	         <div
	           key={item.id}
	           onClick={() => handleSelectItem(item)}
	         >
	           <div className='truncate w-190px'>{item.name}</div>
	         </div>)
	       })
	     }
	</div>
)

到这里,我们可以看到会话置顶的效果已经有了,但是就是有亿点点突兀,哈哈哈!

所以,我为了给它加一个平滑的过渡,找到了一个很好用的轮子,就是react-flip-move ,使用起来也非常方便,直接包裹一层就好啦

javascript 复制代码
import FlipMove from 'react-flip-move';

//...... 此处省略500行代码

return <div className={styles.list}>
		<FlipMove>
			{
		       list.map((item) => {
		       return (
		         <div
		           key={item.id}
		           onClick={() => handleSelectItem(item)}
		         >
		           <div className='truncate w-190px'>{item.name}</div>
		         </div>)
		       })
		     }
	     </FlipMove>
	</div>

说实话,使用起来真的非常方便,也没有任何的复杂配置,接下来请看实现效果:

录屏转gif图片感觉还是有点卡卡的,真实效果其实更丝滑些,感兴趣的小伙伴可以直接上手试一下哦,嘿嘿~

更多参考链接: react-flip-move: 使用翻转技术在DOM更改(例如列表重新排序)之间轻松实现动画效果。

相关推荐
杨丰玮4181 天前
从零手写Java飞机躲障碍游戏|Swing绘图、鼠标跟随、计时器碰撞检测实战(五)
java·python·游戏·游戏引擎·图形渲染·动画·贴图
名字还没想好☜2 天前
Next.js Route Handler 做 SSE 服务端推送:实时进度条、自动重连与什么时候别用 WebSocket
开发语言·javascript·websocket·react·sse·next.js
Richown4 天前
AI + Web3 融合架构:大模型驱动的智能合约自动生成与审计
区块链·react
名字还没想好☜4 天前
React 19 useOptimistic 实战:点赞评论先更新 UI,失败自动回滚
前端·javascript·react.js·ui·react·useoptimistic
名字还没想好☜6 天前
Next.js 用 Server Components 直连数据库:去掉 API 层的边界,和三条别踩的安全红线
前端·javascript·数据库·安全·react·next.js
名字还没想好☜6 天前
React 用自定义 useDebounce Hook 治好搜索框频繁请求:防抖、竞态取消与卸载清理
前端·javascript·react.js·react·hooks
DsirNg6 天前
React Server Components 在真实项目中的边界:哪些组件该放在服务端
性能优化·react·next.js·app router·前端架构·rsc·react server components
名字还没想好☜7 天前
React 用 useEffect 做轮询实战:setInterval 拿到旧 state 的闭包陷阱与正确清理
前端·javascript·react.js·react·useeffect
小田学Python8 天前
Agent 的运行范式:ReAct(Reasoning+Acting)
大模型·react·ai agent·工具调用
张彦峰ZYF9 天前
LangGraph 深入理解 ReAct:让 AI Agent 真正学会「边想边做」
人工智能·llm·agent·react·langgroup