reactjs - 功能组件嵌套 vs. props

标签 reactjs functional-programming inner-classes

我是 React 的新手,我有一个关于架构和设计模式的问题。我已经完成了我的第一个项目(一个 interactive turing machine sequencer 如果有人感兴趣的话。我发现自己经常声明嵌套函数,例如

function MyReactList(props){
   const items = []
   for (let i=0; i<20;i++){
      function MyReactElem(props){
         return <div>
            <h1>{getHeadingFromSomewhereUsingIndex(i)}</h1>
            {getTextFromSomewhereUsingIndex(i)}
         </div>
      }
      
      items.push(<MyReactElement></MyReactElement>)

   }
   return items

}

经过仔细检查,我意识到这可能完全没有意义,因为它 100% 等同于:

function MyReactList(props){
   
   function MyReactElem(props){
      return <div>
         <h1>{getHeadingFromSomewhereUsingIndex(props.index)}</h1>
         {getTextFromSomewhereUsingIndex(props.index)}
      </div>
   }

   const items = []
   for (let i=0; i<20;i++){
      items.push(<MyReactElement index={i}></MyReactElement>)
   }
   return items

}

如果我没记错的话,第二版应该使用更少的内存? 我什至应该嵌套这样的功能组件吗?我的想法是在每个限定符都应该从尽可能小的上下文中声明的范例下工作,但也许那是错误的,因为我不确定它还有什么其他含义,如果嵌套功能组件是,如果有人能给我一些提示,我将不胜感激任何时候都是一个好主意,什么时候是这样。

最佳答案

嵌套函数组件不是一个好主意。为什么不?因为每次 MyReactList 渲染时,它都会重新声明 MyReactElement。这意味着每次 MyReactList 渲染时,都会为 MyReactElement 分配一个新的内存位置。因为函数是通过它们的内存地址进行比较的,并且由于 MyReactElem 在每次渲染时都会被放入一个新的内存地址,所以 React 会认为当前的 MyReactElem 是一个完全不同于上次渲染的 MyReactElem。这会导致卸载之前的 MyReactElem(丢失所有状态)并挂载当前的 MyReactElem(初始化)而不是重新渲染。

如果你保持状态,你就会失去它,这显然会导致严重的错误。但即使您不这样做,重新挂载的 react 也比重新渲染要昂贵得多。

关于reactjs - 功能组件嵌套 vs. props,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64210483/

相关文章:

javascript - React 无需导入即可工作

f# - 通过类型分析的功能程序示例 'writing themselves'

.net - 在 VB 和 C# 中使用 Action/Func/Delegates/Lambda 编写扩展方法

java - Android内部类内存泄漏和上下文泄漏?

reactjs - 如何通过 JSON 向服务器发送 API 请求?不断收到 CORS 错误

reactjs - 使用 React Final-Form 为什么第三方组件的 meta.touched 总是错误?

javascript - 如何在 React Native 列表中的某些位置为元素设置不同的样式?

functional-programming - CL中优化速度声明的作用是什么?

c++ - 这个程序背后的逻辑是什么?

c# - 子类中完整的嵌套部分类