Javascript React钩子:useState更新程序函数:为什么这个钩子会在拖动时删除对象?

Javascript React钩子:useState更新程序函数:为什么这个钩子会在拖动时删除对象?,javascript,react-hooks,context-api,Javascript,React Hooks,Context Api,我在地图上有一个标记,在拖动时使用此功能: function handleOnDragEndUpdateMarker(e) { var markerIndex = e.target.options.marker_index; var markerLatLng = e.target.getLatLng(); //get marker LatLng markerLatLng.id = markerIndex; updateUserMarker(markerLatL

我在地图上有一个标记,在拖动时使用此功能:

  function handleOnDragEndUpdateMarker(e) {
    var markerIndex = e.target.options.marker_index;
    var markerLatLng = e.target.getLatLng(); //get marker LatLng
    markerLatLng.id = markerIndex;
    updateUserMarker(markerLatLng, markerIndex);
  }
该函数触发另一个函数
updateUserMarker
,该函数通过上下文来自组件:

它使用索引,这是一个新对象,包含来自
事件的更新
lat
long
,并附加一个同样来自该事件的
id

在上下文组件中,我有以下功能:

 updateUserMarker: (marker, markerIndex) => {
      console.log('marker, markerIndex ', marker, markerIndex);

      let updatedMarker = user.markers.map(element =>
        element.id == markerIndex ? { ...element, ...marker } : element
      )[0];

      console.log(
        'user.markers[markerIndex] updatedMarker ',
        user.markers[markerIndex],
        updatedMarker
      );
      setUser({
        ...user,
        markers: [
          {
            ...user.markers[markerIndex],
            ...(user.markers[markerIndex] = updatedMarker)
          }
        ]
      });
    },
它可以很好地处理第一个对象lat和lang,但是在拖动开始后添加第二个对象时,它就会消失

也许几个小时前就应该来这里,但我想尽我最大的努力


提前谢谢你

我不知道您为什么要将
[0]
用于
更新的Marker
。我假设您要更新id与markerIndex匹配的标记

updateUserMarker:(marker,markerIndex)=>{
让updatedMarkers=user.markers.map(元素=>
element.id==markerIndex?{…element,…marker}:element
);
设置用户({
…用户,
标记:[…更新的标记]
});
}

嘿,谢谢你的评论!哦
.map
返回一个数组,所以我只想将对象拉出,例如
[{id:xxx,lat:xxx,lng:xxx}]=user.markers.map(…map函数..)[0]
。谢谢!!!!!!!我几个小时前就该这么做了!节日快乐!