You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React中如何保留可变props数组首次渲染的最后一个元素

解决方案

最优实现(无额外重渲染)

直接使用useState的惰性初始化特性即可,这是最贴合需求的原生API实现,无需额外副作用:

function myComponent(props: any) {
    // props.arr = ["1", "2", "3", "4"]
    // 传入函数作为初始值,只会在组件首次渲染时执行1次
    const [lastVal] = useState(() => {
        // 可自行添加空数组兜底逻辑
        return props.arr.length ? props.arr[props.arr.length - 1] : 0
    });

    // 后续无论props.arr如何更新,lastVal都会保留首次渲染时的取值
}

对比原有useEffect方案的优势:

  • 无额外重渲染:useEffect方案会在组件挂载完成后才执行赋值触发二次渲染,惰性初始化直接在首次渲染阶段就拿到正确值,全程仅渲染1次
  • 代码更精简,无需维护副作用依赖
  • 没有执行时机错位问题:useEffect取值是在组件挂载后,惰性初始化取值完全和首次渲染同步

可选方案(无需触发重渲染时使用)

如果你留存的这个值不需要驱动视图更新,用useRef更轻量:

function myComponent(props: any) {
    const lastValRef = useRef(props.arr.length ? props.arr[props.arr.length - 1] : 0);
    
    // 后续通过 lastValRef.current 访问留存值即可
}

内容的提问来源于stack exchange,提问作者Amir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 16:06:03