在reactJS应用程序中将状态对象推送到状态数组中

在reactJS应用程序中将状态对象推送到状态数组中,reactjs,Reactjs,我有一个包含状态的存储文件。我这样定义用户: user: store.getState().user || { jobRecord: [] }, job: store.getState().job || { title: '', company: '', start_date: '', end_date: '' } 我想要的是将一些作业对象推送到user.jobRecord中。作业对象的定义如下: user: store.getState().user || { jobRecord: []

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

user: store.getState().user || { jobRecord: [] },
job: store.getState().job || { title: '', company: '', start_date: 
'', end_date: '' }
我想要的是将一些作业对象推送到user.jobRecord中。作业对象的定义如下:

user: store.getState().user || { jobRecord: [] },
job: store.getState().job || { title: '', company: '', start_date: 
'', end_date: '' }
首先,我在作业对象中设置了一些值,然后将其推送到user.jobRecord中

const joined = user && user.jobRecord;
store.setState({
  user: {
  ...user,
  jobRecord: [...joined, job],
  },
});
通过执行此操作,我得到类型错误:

TypeError:连接的不可编辑

我尝试在其中设置一个记录:

jobRecord: [job],
但jobRecord的结果是:

[对象]


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

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

user: store.getState().user || { jobRecord: [] },
要避免此问题,请使用Object.KeyThis.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);

无法迭代未定义的值

const join=user&&user.jobRecord在user或user.jobRecord处于未定义状态时,将未定义的值分配给联接变量

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

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

不幸的是,这些信息不足以解决问题。例如,store.setState做什么?它与useState的setter方法相同吗?但是,这是绝对正确的:连接是不可编辑的。因此,当时它既不是数组也不是对象。尝试记录它,查看它是否未定义或其他内容。是,joined未定义。第二次试一试怎么样?我登录并将一个作业对象设置到user.jobRecord中。我通过api调用将其存储在数据库中,但它存储了[object object],我不明白您是如何设置一个作业的,但看到作业被记录为[object object]对我来说似乎很好。你在哪里查?开发者控制台可能吗?@devserkan当它没有显示对象的包含时,它看起来怎么样?我通过向本地服务器发送get请求来检查它。但是您如何尝试查看它?它看起来是一个包含对象的数组。不过,你查过@tarzen chugh的答案了吗?