javascript - map 不返回正确的对象数组

标签 javascript reactjs ecmascript-6

尝试做一个映射来将 selected 的值设置为 true 和 false,但它并没有改变现有的 true 值,出了什么问题?

selectTab = tab => e => {
    const { data } = this.state;
    this.setState(
      {
        data: data.map(o =>
          o.tab === tab ? { selected: true, ...o } : { selected: false, ...o }
        )
      },
      () => console.log(this.state.data)
    );
  };

https://codesandbox.io/s/885l8q537l

最佳答案

首先尝试展开对象,然后添加selected 属性。否则 o 中的 selected 属性每次都会覆盖它。

selectTab = tab => e => {
  this.setState(
    prevState => ({
      data: prevState.data.map(o =>
        o.tab === tab ? { ...o, selected: true } : { ...o, selected: false }
      )
    }),
    () => console.log(this.state.data)
  );
};

class App extends React.Component {
  state = {
    data: [
      {
        tab: 1,
        content: "Tab 1 content",
        selected: true
      },
      {
        tab: 2,
        content: "Tab 2 content"
      },
      {
        tab: 3,
        content: "Tab 3 content"
      }
    ]
  };

  selectTab = tab => e => {
    this.setState(
      prevState => ({
        data: prevState.data.map(o =>
          o.tab === tab ? { ...o, selected: true } : { ...o, selected: false }
        )
      }),
      () => console.log(this.state.data)
    );
  };
  
  render() {
    const { activeTab, data } = this.state;
    return (
      <div>
        {data.map(obj => (
          <div onClick={this.selectTab(obj.tab)}>{obj.tab}</div>
        ))}
        {data.map(obj => (
          <div>{obj.selected && obj.content}</div>
        ))}
      </div>
    );
  }
}

ReactDOM.render(<App />, document.getElementById("root"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>

<div id="root"></div>

关于javascript - map 不返回正确的对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53586239/

相关文章:

JavaScript 循环 : for-loop works but not map?

javascript - 为什么 javascript 构造函数会打印传递给它的参数?

Javascript "for of"在 IE 11 中失败

javascript - react native : Create custom component to wrap a page

javascript - 如何从 javascript 中的二维数组中删除开头的逗号?

javascript - 如何使用 Angularjs 重新加载页面?

reactjs - react 路由器仅渲染第一条路线

reactjs - "import {Something} from somelib"和 "import Something from somelib"React.js 之间的区别

javascript - 从 Angular 字符串中删除特殊字符

javascript - 我可以在 Semantic UI React 的选项数组中为下拉组件指定 Divider 或 Header 吗?