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

React函数组件内部使用memo()是否合规?附实现代码咨询

问题解答

你的当前写法不可行,原因是:每次Input组件渲染时,都会重新执行memo(Animated.createAnimatedComponent(Ui.Text)),生成一个全新的AnimatedText组件实例。即使你用了memo,也无法阻止子组件的重复渲染——因为组件类型发生了变化,React会判定这是完全不同的组件,进而销毁旧组件并重新挂载新组件,既浪费性能,还可能丢失组件内部的状态或动画状态。

正确的方案是使用useMemo包裹,配合空依赖数组,确保AnimatedText组件只在组件首次渲染时创建一次:

export function Input({ placeholder }) {
  const AnimatedText = useMemo(() => {
    return memo(Animated.createAnimatedComponent(Ui.Text))
  }, [])

  return (
    <AnimatedText>
      {placeholder}
    </AnimatedText>
  )
}

补充说明:

  • useMemo的空依赖数组[]保证回调函数只执行一次,生成的AnimatedText组件实例在组件生命周期内保持不变。
  • 这里的memo是否需要,取决于Ui.Text本身的props变化情况——如果Ui.Text的props不会频繁无意义变化,memo可以进一步优化渲染;如果Ui.Text本身已经是优化过的组件,也可以考虑去掉memo,只保留Animated.createAnimatedComponent在useMemo中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 01:12:02