开发者问题收集

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

2019-09-20
1224

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

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

我想要将一些作业对象推送到 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: joined is not iterable

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

jobRecord: [job],

但 jobRecord 的结果是:

[object Object]

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

2个回答

您正在检查 store.getState().user 中的 falsey 值,而它实际上是一个对象。因此它将始终为真,并且 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);
tarzen chugh
2019-09-20

无法迭代 undefined

const join = user && user.jobRecorduseruser.jobRecord 为未定义时将未定义的值分配给 joined 变量

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

const joined = user && user.jobRecord || [];
Salman Mehmood
2019-09-20