为了账号安全,请及时绑定邮箱和手机立即绑定

箭头函数不是函数。是数组的一个实例。反应原生钩子

箭头函数不是函数。是数组的一个实例。反应原生钩子

哆啦的时光机 2022-05-26 13:58:17
我得到了这个使用套接字的钩子设置import { useEffect, useState, useRef, useContext } from 'react';import useSocket from './useSocket';export default useMarkers = () => {  const [markers, setMarkers] = useState([]);  const [socket] = useSocket();  useEffect(() => {    socket.on('all markers', allMarkers => {      setMarkers([...allMarkers]);    });  }, [setMarkers]);  const addMarker = marker => {    socket.emit('add marker', marker);  };  return [markers, addMarker];};然后我试图在我的其他钩子之一中调用 addMarker 函数,例如:const [addMarker] = useMarkers();addMarker(address);...但是,我收到一个错误:addMarker is not a function. (In 'addMarker(address)', 'addMarker' is an instance of Array)我在这里想念什么?
查看完整描述

2 回答

?
炎炎设计

TA贡献1808条经验 获得超4个赞

这是您要返回的数组:

返回[标记,添加标记];

其中的第一个元素是markers数组。其中的第二个元素是addMarker函数。

const [addMarker] = useMarkers();

在这里,您将第一个元素分配给addMarker丢弃第二个元素。


数组解构是基于索引而不是最初用于填充数组的变量的名称。


查看完整回答
反对 回复 2022-05-26
?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

与对象解构不同,数组解构不保留变量名(因为数组没有键名,它们有数字)。所以当你这样做时:


const [addMarker] = useMarkers();

您分配markers给addMarker:


return [markers, addMarker];

           |

           |

           v

const  [addMarker] = useMarkers();

混淆来自这样一个事实,即有两个单独的变量都称为addMarker不同的事物。


要修复它,请将第二个元素分配给addMarker:


const [ ignored, addMarker ] = useMarkers();

或者使用对象解构:


return { markers, addMarker }


// then later:


const { addMarker } = useMarkers();


查看完整回答
反对 回复 2022-05-26
  • 2 回答
  • 0 关注
  • 94 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信