reactjs - 修改可以调用方法的变量/对象
问题描述
我有一个名为socket
. 我也可以通过导入它在组件中使用它import socket from '../Socket'
,socket
然后我可以在组件中再次使用它。问题是,我想在这个文件中调用一个方法,但是当我这样做时,我得到了错误Error: Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons ...
。我尝试过的看起来像这样
import io from 'socket.io-client'
import UseChat from "./Usechat"
const Socket = () => {
console.log('SOCKET ERSTELLT')
const SOCKET_URL = 'http://localhost:4000'
const socket = io(SOCKET_URL)
const { updateMessages } = UseChat()
socket.on('newChatMessage', (message) => {
console.log('*Nachricht empfangen*', message)
updateMessages(message);
})
return { socket }
}
export default Socket
现在我的问题是,是否有重写此对象/变量的选项,以便我只创建此对象/变量一次并每次引用同一个,同时构建一个也可以调用方法的“真实函数”?
这就是我所拥有的
import io from 'socket.io-client'
console.log('SOCKET ERSTELLT')
const SOCKET_URL = 'http://localhost:4000'
const socket = io(SOCKET_URL)
socket.on('newChatMessage', (message) => {
console.log('*Nachricht empfangen*', message)
// Here I want to call the method updateMessages or setState for setMessages
})
export default socket
我要调用的对象数组函数
const UseChat = (roomId) => {
const [messages, setMessages] = useState([])
useEffect(() => {
}, [roomId])
const sendMessage2 = (messageBody, timeStamp, chatname) => {
console.log('Bin bei Socket io ind sende')
socket.emit('message', {
body: messageBody,
timestamp: timeStamp,
senderId: cookie.load('userData').id,
//roomid: chatname,
roomid: chatname
})
}
const updateMessages = (message) => {
const incomingMessage = {
...message,
ownedByCurrentUser: message.senderId === 1 /*socket.id*/,
timestamp: message.timestamp,
}
console.log(incomingMessage)
setMessages((messages) => [...messages, incomingMessage])
}
return { messages, sendMessage2, setGrosseJosn, updateMessages }
}
export default UseChat
解决方案
推荐阅读
- docker - docker compose inside docker in docker
- wordpress - 从管理栏和插件列表中隐藏插件
- sql-server - 使用 TRANSLATE 函数替换 Unicode 字符
- r - 如何在R中自动提取多个函数输出
- python - Django 上下文处理器在重定向时抛出错误
- node.js - 使用不和谐护照时出错(未提供范围)
- javascript - Keyup 功能仅对输入的第一个字母有效
- reactjs - 去中心化应用
- python - 复制数据帧 n 次并将另一列增加 1
- java - 似乎无法理解这里有什么问题。我在线程“main”java.lang.NullPointerException中有这个错误消息异常