尝试在 React JS 中按部分显示 JSON

Posted

技术标签:

【中文标题】尝试在 React JS 中按部分显示 JSON【英文标题】:Trying to display JSON by sections in React JS 【发布时间】:2021-02-15 16:14:53 【问题描述】:

问题:

这就是应用程序应该如何呈现联系人,根据他们的名字字母按部分组织 - A,B,C...到目前为止,我想不出一种方法来从 A 以这种方式显示它们到 Z。无论是更改 JSON 结构还是在 ReactJS 中都没有解决它。每次在 JSON 中添加更多属性的尝试都面临Array.map 一次“扫描”的限制。任何帮助表示赞赏!

这是它背后的 JSON:

[
    
        "id": 1,
        "fname": "Amanda",
        "lname": "Gonzales",
        "contact": "(31) 9 9580-2530",
    ,
    
        "id": 2,
        "fname": "Astrid",
        "lname": "Guzman",
        "contact": "(31) 9 9790-2530",
    ,
    
        "id": 3,
        "fname": "Aurora",
        "lname": "Muñoz",
        "contact": "(57) 9 9580-2530",
    ,
  
]

还有 React JS:

class ShowContactsList extends Component 
    render() 
        const mappedJSON = mockData.map((inputMap, index) => (
            <ContactListOneContact
                key=index
                lname=inputMap.lname
                fname=inputMap.fname
                fname=inputMap.fname
                contact=inputMap.contact
            />
        ));
        return (
            <div style= backgroundColor: 'yellow', width: '80%' >
                <h1>A</h1>
                mappedJSON
            </div>
        )
    

【问题讨论】:

每次迭代mockData整个组件重新渲染时,可能会出现死循环。尝试console.log(mappedJson) 看看它会返回什么。将此映射函数移动到其他地方,作为类函数或最佳重构组件到功能组件。 请注意:所选解决方案假定数据已按姓氏预先排序。如果它未排序,那么它将仅按结构中出现的姓氏分组。为确保已排序,您可以使用sort 和localeCompare:demo 【参考方案1】:

您可以为您的联系人按字母创建一个组,然后迭代字母并为每个字母迭代联系人

    export default class ShowContactsList extends Component 
      render() 
        const groupedByLetter = mockData.reduce((groups, contact) => 
          const letter = contact.fname[0].toUpperCase();
          const group = groups[letter] || [];
          group.push(contact);
          groups[letter] = group;
          return groups;
        , );
    
        return Object.entries(groupedByLetter).map(([letter, contacts]) => 
          return (
            <div style= backgroundColor: "yellow", width: "80%" >
              <h1>letter</h1>
              contacts.map((inputMap, index) => (
                <ContactListOneContact
                  key=index
                  lname=inputMap.lname
                  fname=inputMap.fname
                  contact=inputMap.contact
                />
              ))
            </div>
          );
        );
      
    

https://codesandbox.io/s/twilight-cdn-e4tgs?file=/src/App.js的演示

【讨论】:

以上是关于尝试在 React JS 中按部分显示 JSON的主要内容,如果未能解决你的问题,请参考以下文章

React 显示 json 键和值

如何在 React Native 中按日期分组

在 react 组件中加载和显示 json 数据

无法在 React.js 中读取 json,出现意外的令牌错误

将 JSON 文件中的项目数据动态加载到 React

如何在 React.js 中按字母顺序对数组中的对象进行排序