如何在渲染部分定义对象?

Posted

技术标签:

【中文标题】如何在渲染部分定义对象?【英文标题】:How to define an object inside the render part? 【发布时间】:2021-09-17 23:38:16 【问题描述】:

在我的渲染代码中,我创建了一个地图,以便将它与 React 的条件渲染一起使用,但我得到一个未定义的错误,因为它找不到它。有办法解决吗?

render()
    if(this.state.jsondata.prediction2)
        const occurrenceMap2 = Object.values(this.state.jsondata.prediction2).reduce((finalMap, item) => 
            finalMap[item] = ++finalMap[item] || 1;   
            return finalMap;
         , )
    
...

   this.state.jsondata.prediction2 &&
     <p> occurrenceMap2[0] </p>
   


【问题讨论】:

不要使用 if 语句 【参考方案1】:

如果this.state.jsondata.prediction2 没有值,则删除if 语句并声明一次occurrenceMap2 并设置默认值。

const occurrenceMap2 = this.state.jsondata.prediction2 && Object.values(this.state.jsondata.prediction2).reduce((finalMap, item) => 
  finalMap[item] = ++finalMap[item] || 1;   
  return finalMap;
 , ) || []; // set a default value here

【讨论】:

【参考方案2】:

constletjavascript 中是块作用域的,这意味着它们只存在于您定义它们的块中。这就是为什么在这种情况下,与 React 没有任何关系,您无法从 if 语句之外访问 occurenceMap2。试试这个:

    let occurrenceMap2 = [];
    if(this.state.jsondata.prediction2)
        occurrenceMap2 = Object.values(this.state.jsondata.prediction2).reduce((finalMap, item) => 
            finalMap[item] = ++finalMap[item] || 1;   
            return finalMap;
         , )
    
...

   this.state.jsondata.prediction2 &&
     <p> occurrenceMap2[0] </p>
   

【讨论】:

它就像一个魅力!非常感谢,是的,我忘记了块范围,我之前已经遇到过类似的问题。谢谢

以上是关于如何在渲染部分定义对象?的主要内容,如果未能解决你的问题,请参考以下文章

如何在多采样纹理上渲染帧缓冲区对象?

如何渲染多个纹理?

如何使用 render_to_string 在 lib ruby​​ 类中渲染部分内容

如何避免在每次渲染时触发useEffect?

EL 空运算符如何在 JSF 中工作?

如何将自定义对象添加到 xib 文件的“对象”部分?