将状态对象推入reactJS应用程序中的状态数组

时间:2019-09-20 06:57:25

标签: reactjs

我有一个包含状态的存储文件。我这样定义用户:

dart:io

我想要的是将一些作业对象推送到user.jobRecord中。作业对象的定义如下:

dart:io

因此,首先,我在job对象中设置一些值,然后将其推送到user.jobRecord。

user: store.getState().user || { jobRecord: [] },

这样做,我得到类型错误:

  

TypeError:联接是不可迭代的

我尝试使用此方法仅在其中设置一条记录:

job: store.getState().job || { title: '', company: '', start_date: 
'', end_date: '' }

但是jobRecord的结果是:

  

[对象对象]

非常感谢您考虑我的问题。

2 个答案:

答案 0 :(得分:1)

您正在检查store.getState().user中的假值,该值实际上是一个对象。因此,在对空对象进行解构时,它将始终为真,jobRecord永远不会被填充,[...user]会出错。

user: store.getState().user || { jobRecord: [] },

为避免此问题,请使用Object.keys(this.state.user).length检查对象是否为空。

下面的工作代码:-

import React from "react";
import ReactDOM from "react-dom";

class App extends React.Component {
  state = {
    job: {},
    user: {}
  }
  componentDidMount () {
    let user= Object.keys(this.state.user).length || { jobRecord: [] };

    let job= this.state.job || {
      title: '',
      company: '',
      start_date: '',
      end_date: ''
    };

    const joined = user && user.jobRecord;
    this.setState({
      user: {
      ...user,
      jobRecord: [...joined, job],
      },
    });
  }
  render () {
    console.log('inside user',this.state.user)
    return (
      <div className="App">
      </div>
    );
  }
}

const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);

答案 1 :(得分:0)

不可能迭代undefined

const joined = user && user.jobRecordjoineduser处于未定义状态时为user.jobRecord变量分配未定义值

要修复此问题,请改用以下代码:

const joined = user && user.jobRecord || [];