开发者问题收集

在对象中映射对象[重复]

2020-04-16
92

我尝试在 React 中映射和对象,但一直收到以下错误 “TypeError:无法读取未定义的属性‘map’”

我的预期结果

任务 1 任务 2 任务 3 任务 4

代码

import React, { Component } from 'react';


class MapEx extends Component {
  constructor(props) {
    super(props);
    this.state =  {
      tasks: {
        'task-1': { id: 'task-1', content: 'clean house' },
        'task-2': { id: 'task-2', content: 'walk dog' },
        'task-3': { id: 'task-3', content: 'Do pushups' },
        'task-4': { id: 'task-4', content: 'have a drink' }
      }
  };
}
  render() {

    const tasks = this.state.tasks
    console.log(tasks)
    return (
      <div>
        <h1>Hello</h1>
       <p> {this.tasks.map((task) => 
              task.id)}</p>


      </div>
    );
  }
}
export default MapEx;
3个回答

两个问题:

  1. 您引用的是 this.tasks ,而不是 this.state.tasks
  2. 您在对象上而不是数组上使用 map

尝试类似这样的操作:

return (
  <div>
    <h1>Hello</h1>
    {Object.values(this.state.tasks).map(task => <p>{task.id}</p>)}
  </div>
);
srk
2020-04-16

map 只能用于数组。首先,将数据转换为数组 DS,然后按以下步骤操作。

import React, { Component } from 'react';

class MapEx extends Component {
  constructor(props) {
    super(props);
    this.state =  {
      tasks: {
        'task-1': { id: 'task-1', content: 'clean house' },
        'task-2': { id: 'task-2', content: 'walk dog' },
        'task-3': { id: 'task-3', content: 'Do pushups' },
        'task-4': { id: 'task-4', content: 'have a drink' }
      }
    };
  }
  render() {

    const tasks = this.state.tasks
    console.log(tasks)
    return (
      <div>
        <h1>Hello</h1>
        {Object.values(tasks).map(task => (<p>{task.id}</p>))}
      </div>
    );
  }
}

export default MapEx;
arunmmanoharan
2020-04-16

您可以这样做:

  • 解构状态
  • 由于任务是一个无法映射到它的对象,因此您需要使用 object.keys

import React, { Component } from 'react';


class MapEx extends Component {
  constructor(props) {
    super(props);
    this.state =  {
      tasks: {
        'task-1': { id: 'task-1', content: 'clean house' },
        'task-2': { id: 'task-2', content: 'walk dog' },
        'task-3': { id: 'task-3', content: 'Do pushups' },
        'task-4': { id: 'task-4', content: 'have a drink' }
      }
    };
  }
  render() {

    const {tasks} = this.state
    console.log(tasks)
    return (
      <div>
        <h1>My tasks</h1>
        {!!tasks ? Object.values(tasks).map(task => (<p>{task.id}</p>)) : null}
      </div>
    );
  }
}
export default MapEx;

https://codesandbox.io/s/react-boilerplate-r68kh 上的工作示例>

ProblemsEverywhere
2020-04-16