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再次生效。