• React报错之map() is not a function


    当我们对一个不是数组的值调用map()方法时,就会产生"TypeError: map is not a function"错误。为了解决该错误,请将你调用map()方法的值记录在console.log上,并确保只对有效的数组调用map

    这里有个示例来展示错误是如何发生的。

    1. const App = () => {
    2. const obj = {};
    3. // ⛔️ Uncaught TypeError: map is not a function
    4. return (
    5. <div>
    6. {obj.map(element => {
    7. return <h2>{element}</h2>;
    8. })}
    9. </div>
    10. );
    11. };
    12. export default App;

    我们在一个对象上调用Array.map()方法,得到了错误反馈。

    为了解决该错误,请console.log你调用map方法的值,确保它是一个有效的数组。

    1. export default function App() {
    2. const arr = ['one', 'two', 'three'];
    3. return (
    4. <div>
    5. {arr.map((element, index) => {
    6. return (
    7. <div key={index}>
    8. <h2>{element}</h2>
    9. </div>
    10. );
    11. })}
    12. </div>
    13. );
    14. }

    Array.isArray

    你可以通过使用Array.isArray方法,来有条件地检查值是否为数组。

    1. const App = () => {
    2. const obj = {};
    3. return (
    4. <div>
    5. {Array.isArray(obj)
    6. ? obj.map(element => {
    7. return <h2>{element}</h2>;
    8. })
    9. : null}
    10. </div>
    11. );
    12. };
    13. export default App;

    如果值为数组,则返回对其调用map方法的结果,否则返回null。这种方式不会得到错误,即使值不是一个数组。

    如果值是从远程服务中获取,请确保它是你期望的类型,将其记录到控制台,并确保你在调用map方法之前将其解析为一个原生JavaScript数组

    Array.from

    如果有一个类数组对象,在调用map方法之前你尝试转换为数组,可以使用Array.from()方法。

    1. const App = () => {
    2. const set = new Set(['one', 'two', 'three']);
    3. return (
    4. <div>
    5. {Array.from(set).map(element => {
    6. return (
    7. <div key={element}>
    8. <h2>{element}</h2>
    9. </div>
    10. );
    11. })}
    12. </div>
    13. );
    14. };
    15. export default App;

    在调用map方法之前,我们将值转换为数组。这也适用于类数组的对象,比如调用getElementsByClassName方法返回的NodeList

    Object.keys

    如果你尝试迭代遍历对象,使用Object.keys()方法获取对象的键组成的数组,在该数组上可以调用map()方法。

    1. export default function App() {
    2. const employee = {
    3. id: 1,
    4. name: 'Alice',
    5. salary: 100,
    6. };
    7. return (
    8. <div>
    9. {/* 👇️ iterate object KEYS */}
    10. {Object.keys(employee).map((key) => {
    11. return (
    12. <div key={key}>
    13. <h2>
    14. {key}: {employee[key]}
    15. </h2>
    16. <hr />
    17. </div>
    18. );
    19. })}
    20. <br />
    21. <br />
    22. <br />
    23. {/* 👇️ iterate object VALUES */}
    24. {Object.values(employee).map((value, index) => {
    25. return (
    26. <div key={index}>
    27. <h2>{value}</h2>
    28. <hr />
    29. </div>
    30. );
    31. })}
    32. </div>
    33. );
    34. }

    我们使用Object.keys方法得到对象的键组成的数组。

    1. const employee = {
    2. id: 1,
    3. name: 'Alice',
    4. salary: 100,
    5. };
    6. // 👇️ ['id', 'name', 'salary']
    7. console.log(Object.keys(employee));
    8. // 👇️ [1, 'Alice', 100]
    9. console.log(Object.values(employee));
  • 相关阅读:
    DXF读写:标注样式组码中文说明
    java项目之校园餐厅管理(ssm源码+文档)
    麒麟系统开发笔记(八):在国产麒麟系统上使用linuxdeployqt发布qt程序
    SolidWorks自定义装配体模板的方法
    WebSocket
    代码随想录算法训练营第51天|309. 买卖股票的最佳时机含冷冻期,714. 买卖股票的最佳时机含手续费,股票问题总结
    java计算机毕业设计ssm+vue东莞大益球队管理系统
    C++11
    Himall商城-公共方法
    Git 配置多账号
  • 原文地址:https://blog.csdn.net/sinat_40572875/article/details/127999895