javascript - 无法识别通过 ReactJS 发送函数中的道具传递 websocket
问题描述
我一直在尝试通过道具将 websocket 传递给孩子,离开本教程: https ://dev.to/finallynero/using-websockets-in-react-4fkp
像这样从父级传递 websocket
render() {
return <MIDIComponent websocket={this.state.ws} />;
}
然后像这样获取和使用它
const websocket = this.props;
function getMIDIMessage(msg) {
websocket.send(
JSON.stringify({ message: Array.from(msg.data), type: "config" })
);
这一切都包含在一个带有一堆其他东西的函数中,然后从内部调用componentDidMount()
当我这样做时,我得到了错误
Uncaught TypeError: websocket.send is not a function
这样做会导致 websocket 未定义
const {websocket} = this.props;
编辑:
websocket 是这样创建的:
var ws = new WebSocket("ws://localhost:8000/ws/assistant/user/");
服务器肯定是连接的,将此行直接复制到我的子组件中并直接在其中打开 websocket 使其工作并允许我将数据发送到服务器,这让我想知道我是否应该这样做。但是我将在整个应用程序中使用 websocket 几次,所以只初始化一次并将它传递到任何需要去的地方感觉是正确的。
谁能告诉我发生了什么事?
解决方案
好的,所以我解决了这个问题。
部分原因是我自己的愚蠢 - 首先我将 websocket 组件创建为 WebSocket,这显然与 WebSocket() 函数发生冲突。
然后,当在孩子内部设置 componentDidMount() 中的所有内容时,我忽略了将“this”传递给我在那里调用的函数,因此无法访问 this.props。它现在正在工作。
componentDidMount() {
const that = this;
this.setupMIDI(that);
}
推荐阅读
- javascript - 在谷歌搜索中搜索特定链接
- javascript - 使用检查元素编辑 JavaScript
- python - pandas to_csv 参数 float_format 到百分比
- wordpress - Wordpress Ultimate Member:在帐户页面上显示个人资料信息
- python - 通过固定大小的python数据套接字发送整数
- apache - Modsecurity & Apache:如何通过标头限制访问速率?
- events - 最小化 Tcl/Tk 时也启用绑定
- python - 如何处理python和索引中不同大小的列表(列表索引)
- css - 悬停时显示材质复选框动画
- ruby-on-rails - ActionView::Template::Error(数据库和 Ruby 的时区信息不一致