我有一个这样的对象
this.currentRegion = {
latitude: 25.3170013,
longitude: 55.4748285,
latitudeDelta: LATITUDE_DELTA,
longitudeDelta: LONGITUDE_DELTA,
};
和另一个对象
coords = {
accuracy: 20,
altitude: 5,
heading: 0,
latitude: 25.380599999999998,
longitude: 55.3992,
speed: 0,
}
我需要
this.currentRegion = {
latitude: 25.380599999999998,
longitude: 55.3992,
latitudeDelta: LATITUDE_DELTA,
longitudeDelta: LONGITUDE_DELTA,
}
我尝试了this.currentRegion = Object.assign(this.currentRegion, region.coords);
并收到了错误消息
试图在不可变且已冻结的对象上设置键
答案 0 :(得分:3)
this.currentRegion = {...this.currentRegion, latitude: coords.latitude, longitude: coords.longitude}
答案 1 :(得分:0)
尝试
this.currentRegion.latitude = coords.latitude
this.currentRegion.longitude = coords.longitude
this.currentRegion.latitudeDelta = coords.latitudeDelta
this.currentRegion.longitudeDelta = coords.longitudeDelta
答案 2 :(得分:0)
如果您在React中尝试使用this.setState({currentRegion : ...this.currentRegion, latitude: coords.latitude, longitude: coords.longitude })
为什么使用setState代替this.state
切勿直接更改 this.state ,因为此后可能会调用 setState() 替换您所做的突变。将 this.state 视为 不变的。
setState()不会立即突变 this.state ,但会创建一个 等待状态转换。呼叫此后访问 this.state 方法可能会返回现有值。
如需进一步讨论,请点击此处:What the difference of this.state and this.setstate in ReactJS?
答案 3 :(得分:-1)
与许多问题一样,您可以使用Array.prototype.reduce
解决此问题。
此解决方案的好处是您不必对要传输的字段进行硬编码-它只会覆盖已经存在的所有字段。
let currentRegion = {
latitude: 25.3170013,
longitude: 55.4748285,
latitudeDelta: 123,
longitudeDelta: 456,
};
const coords = {
accuracy: 20,
altitude: 5,
heading: 0,
latitude: 25.380599999999998,
longitude: 55.3992,
speed: 0,
};
console.log(currentRegion);
currentRegion = Object.keys(coords).reduce((acc, val) => {
if (typeof acc[val] !== 'undefined') {
acc[val] = coords[val];
}
return acc;
}, currentRegion);
console.log(currentRegion);