箭头函数不是函数。是数组的一个实例。反应本机挂钩
Arrow function is not a function. is an instance of Array. React-native hooks
我得到了这个使用套接字的挂钩设置
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)
我在这里错过了什么?
这是您要返回的数组:
return [markers, addMarker];
里面的第一个元素就是markers
数组。其中的second元素就是addMarker
函数。
const [addMarker] = useMarkers();
此处您将 第一个 元素分配给 addMarker
并丢弃 第二个元素。
数组解构基于 index 而不是最初用于填充数组的变量的名称。
数组解构与对象解构不同,它不保留变量名(因为数组没有键的名称,它们有数字)。所以当你这样做时:
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();
我得到了这个使用套接字的挂钩设置
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)
我在这里错过了什么?
这是您要返回的数组:
return [markers, addMarker];
里面的第一个元素就是markers
数组。其中的second元素就是addMarker
函数。
const [addMarker] = useMarkers();
此处您将 第一个 元素分配给 addMarker
并丢弃 第二个元素。
数组解构基于 index 而不是最初用于填充数组的变量的名称。
数组解构与对象解构不同,它不保留变量名(因为数组没有键的名称,它们有数字)。所以当你这样做时:
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();