我在 React 子组件中的函数的参数没有被传递给父组件的函数。为什么会这样?

幻想

在父级中:

 const [newPinPosition, setNewPinPosition] = React.useState({ lat: 0 , lng: 0 });
 const updateNewPinPos = (pos) => {
   console.log(pos);
   setNewPinPosition({ lat: pos.lat, lng: pos.lng });
  };

  // in the render method of the parent react component
  <Draggable
     draggable={draggable} 
     newPinPosition={newPinPosition}   
     setCenterPos={() => { getCurrentCenter(map); }}
     updatePos={() => { updateNewPinPos(newPinPosition); }}
   />

在孩子身上:

const updatePosition = useCallback(() => {
const marker = markerRef.current;
// console.log(`marker._latlng : ${marker._latlng}`);
props.updatePos(marker._latlng);
});

<StyledMarker   
   position={props.newPinPosition}
   draggable={props.draggable}
   ref={markerRef}
   eventHandlers={{
      dragend: () => {updatePosition();},
      }}
 >

我正在使用 React Leaflet 来渲染世界地图。我正在尝试在 dragend 事件上更新可拖动标记的状态(位置对象)。

当 dragend 触发时, updatePos 也会触发(应该如此)并调用 props.updatePos (应该如此)。

问题是这样的:在孩子的 console.log 中,我有标记的位置对象。这是预期的正确行为。在父组件中,正在调用 updateNewPinPos 函数,但 pos 参数是一个空对象。即使我使用 marker._latlang 对象调用函数,也会发生这种情况。为什么会这样?这个对象是如何在孩子和父母之间“丢失”的?

我对反应很陌生,所以如果这是非常基本的,我很抱歉,但我在这方面遇到了很多困难。如有必要,我可以提供更多信息。

魅力

您没有使用的依赖数组useCallback

钩子的useCallback第二个参数是它的依赖数组,你应该把你在useCallback函数中使用的任何东西放在那里。只要依赖项相同,React 就会缓存你的函数。

我建议不要useCallback在这种情况下使用。但如果你仍然想这样做,你应该这样做:

const updatePosition = useCallback(() => {
  const marker = markerRef.current;
  props.updatePos(marker._latlng);
}, [props.updatePos]);

同样在您的父组件中,您应该使用给定的参数,或者只是按原样传递函数,如下所示:

 <Draggable
     draggable={draggable} 
     newPinPosition={newPinPosition}   
     setCenterPos={() => { getCurrentCenter(map); }}
     updatePos={updateNewPinPos}
   />

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么我的道具没有传递给子组件?

为什么即使我没有向组件传递任何内容,React仍会渲染组件?

为什么我们能够在 react 组件的构造函数中绑定函数?

为什么我的 React Function 组件没有出现?

React.js:从父组件传递给子组件的函数没有被调用

当我在嵌套的 React 组件中调用作为 props 传递的函数时会发生什么?

如何将函数传递给 React 中的父组件?

为什么我的 react-bootstrap 模态组件显示这样?

React - 如何更新子组件的父组件 onclick 中的状态 - 我做错了什么?

为什么在 vuejs2 中我的默认道具没有传递给我的子组件?

为什么我的react组件中的context.router没有定义?

用 Enzyme 开玩笑,为什么在我的 React 组件测试中没有触发“toHaveBeenCalled”?

为什么我的参数没有传递到函数中?

无需在子组件和父组件之间传递数据的情况下,我的“获取”请求应放在我的React应用程序中的什么位置?

将函数向下传递给React中的子组件

React - 如何使用子组件设置我的父状态,使用函数结构(而不是类)

为什么我的React组件状态显示在我的URL中?

为什么我的React组件会不断重新渲染?

为什么 props 没有传递给子组件 Route React?

为什么我必须在React中将一个函数传递给'useState'的setter函数?

React js,当我更改open的值时,为什么我的组件没有重新渲染?

我可以以编程方式将 prop 传递给 react 中的子组件吗?

将函数传递给React中的组件

在React的子组件中调用父函数

我如何接受React组件构造函数作为TypeScript中的函数参数

为什么我的图像(和子组件)没有在React Native上与ImageBackground一起显示?

为什么我的 App.js 使用函数式组件作为默认 React?

如果我有一个按钮在React中的第二个子级中触发状态,如何将状态传递给父级组件

在 React 函数组件中的 onClick 事件中,我应该通过引用传递函数还是创建匿名函数?