Reactjs 如何更新action creator-react中的值

Reactjs 如何更新action creator-react中的值,reactjs,redux,Reactjs,Redux,我正在尝试更新动作创建者中的响应 一旦收到响应,我将更新时区(现在硬编码) 这里是答案 data = [ { "created": {timestamp: "2018-05-12T16:55:32Z", Id: "234j", name: "jim"} "id": "804690986026920900000061579629" "lastUpdated": {timestamp: "2018-05-12T16:55:32Z", Id: "234j", name: "j

我正在尝试更新动作创建者中的响应

一旦收到响应,我将更新时区(现在硬编码)

这里是答案

 data = [
 {
   "created": {timestamp: "2018-05-12T16:55:32Z", Id: "234j", name: "jim"}
    "id": "804690986026920900000061579629"
    "lastUpdated": {timestamp: "2018-05-12T16:55:32Z", Id: "234j", name: "jim"}
    "note": "standard 9"
 },                             
 {
   "created": {timestamp: "2018-05-12T17:49:32Z", Id: "444a", name: "antony"}
    "id": "804690986026920900000061579630"
    "lastUpdated": {timestamp: "2020-05-12T16:49:32Z", Id: "444a", name: "antony"}
    "note": "standard 9"
 },
 {
   "created": {timestamp: "2018-05-12T17:55:12Z", Id: "123m", name: "mark"}
    "id": "804690986026920900000061579631"
    "lastUpdated": {timestamp: "2020-05-12T17:49:12Z", Id: "123m", name: "mark"}
    "note": "standard 9"
 }
];
action.js

then((results) => {
  const hardcodedValue =  "2020-05-22T04:49:44Z"
  const getLocaltime = results.data.map((updatetime)=>{
    return {...updatetime, lastUpdated.timestamp:hardcodedValue}
   //getting error at lastUpdated.timestamp
  })
  results.data = getLocaltime;
    dispatch({
      type: "RECEIVED_DATA",
      payload: updateId === '' ? {} : results,
    })

这不是一个有效的对象:

{ ...updatetime, lastUpdated.timestamp:hardcodedValue }
尝试将其修复为:

{ ...updatetime, lastUpdated: { ...updatetime.lastUpdated, timestamp: hardcodedValue } }
您也可以这样做:

updatetime.lastUpdated.timestamp = hardcodedValue;
return {...updatetime}
then((results) => {
  const hardcodedValue = "2020-05-22T04:49:44Z";
  results.data.forEach((row) => {
      row.lastUpdated.timestamp = hardcodedValue;
  });
  dispatch({
    type: "RECEIVED_DATA",
    payload: localAccountId === '' ? {} : results,
  })

这将更新lastUpdated对象,因为您返回了一个新的外部对象,所以引用将发生更改,并且不会丢失任何数据。

最简单的方法是,因为它的新数据和对象引用可以保持不变,您可以像这样对其进行变异:

updatetime.lastUpdated.timestamp = hardcodedValue;
return {...updatetime}
then((results) => {
  const hardcodedValue = "2020-05-22T04:49:44Z";
  results.data.forEach((row) => {
      row.lastUpdated.timestamp = hardcodedValue;
  });
  dispatch({
    type: "RECEIVED_DATA",
    payload: localAccountId === '' ? {} : results,
  })

是我们唯一需要更新的吗??results.data=getLocaltime@Domino987如果我执行{…updatetime,lastUpdated:{timestamp:hardcodedValue}}会发生什么?@user13465472您将丢失上一个lastUpdated对象中的信息。它只会被{“创建”:{timestamp:“2018-05-12T17:55:12Z”,Id:“123m”,name:“mark”}“Id:“804690986026920900000061579631”最后更新:{timestamp:“2020-05-12T17:49:12Z”,“注意”:“标准9”}@Domino987还有一个问题吗?这是我们更新响应的唯一方法吗??results.data=getLocalTime谢谢,我还有几个问题,基于时间戳,我得到的是UTC时间,需要将其转换为本地时间,如果您对此有任何想法,请分享,您只需创建一个新的日期对象和新日期(“2020-05-22T04:49:44Z”);例如,如果您使用.toString()呈现它,它将是local.ready created.timestamp和lastupdated.timestamp来自sql时间戳(后端响应),因此我需要在action creator本身中将其设置为local?是的,如果您在客户端接收到该数据,请使用日期对象将其包装,它将是local。将其发送回服务器时要小心,以确保其utc再次生效。