【问题标题】: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 语句

标签: reactjs conditional-rendering


【解决方案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】:

    constlet 在 JavaScript 中是块作用域的,这意味着它们只存在于您定义它们的块中。这就是为什么在这种情况下,与 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>
       }
    }
    

    【讨论】:

    • 它就像一个魅力!非常感谢,是的,我忘记了块范围,我之前已经遇到过类似的问题。谢谢
    猜你喜欢
    • 1970-01-01
    • 2018-10-16
    • 1970-01-01
    • 2022-06-27
    • 2011-08-09
    • 1970-01-01
    • 1970-01-01
    • 2015-11-28
    • 1970-01-01
    相关资源
    最近更新 更多