gpt4 book ai didi

node.js - React 和 Socket.io

转载 作者:搜寻专家 更新时间:2023-11-01 00:31:32 24 4
gpt4 key购买 nike

我正在尝试使用 ReactJSSocket.io 创建一个简单的应用程序

在我的组件中,我希望能够与服务器通信,但问题是我不知道该怎么做 io.connect()

1.我是否需要像 io.connect("http://myHost:7000") 那样显式指定 IP 地址,还是说:io.connect( )?正如我们在这段代码中看到的: https://github.com/DanialK/ReactJS-Realtime-Chat/blob/master/client/app.jsx

2.我做的与此代码大致相同,但是当我执行 npm start 时收到错误消息,因为 io 未定义。我认为,io 是通过包含 socket.io 脚本在全局范围内提供的。我怎么解决这个问题 ?

'use strict';
var React = require('react');
var socket = io.connect();
var chatWindow = React.createClass({

displayName: 'chatWindow',

propTypes: {},

getDefaultProps: function() {
return ({
messages: 0
});
},
componentDidMount: function() {
socket = this.props.io.connect();
socket.on('value', this._messageRecieve);
},
_messageRecieve: function(messages) {
this.setState({
messages: messages
});
},
getInitialState: function() {
return ({
messages: 0
});
},
_handleSend: function(){
var newValue = parseInt(this.refs.messageBox.value) + this.props.messages;
this.setState({
messages: newValue
});
socket.emit('clientMessage', { message: newValue});
},
render: function() {
var window =
<div>
<div>{this.props.messages}</div>
<input type="text" id="messageBox" refs="messageBox"></input>
<input type="button" onClick={this._handleSend} value="send" id="send"/>
</div>;
return (window);
}
});

module.exports = chatWindow;

这是代码:

https://github.com/arian-hosseinzadeh/simple-user-list

最佳答案

答案:

1) 不,你不需要指定IP,你甚至可以使用/它将通过默认的 HTTP 80 端口,无论如何,您可以在 socket.io 站点上找到更多示例。

2) 需要 io也记得加socket.io-client到您的包裹:

var React = require('react'),
io = require('socket.io-client');

无论如何,如果你想包含 socket.io 服务器作为静态文件提供的客户端脚本,那么记得使用 <script/> 将它添加到你的 HTML 中。标记,这样你就可以在全局范围内拥有 io,避免 require 部分,但好吧,我更喜欢 require 它。

现在,关于...

尝试我的库:https://www.npmjs.com/package/react-socket

它将处理挂载时的套接字连接和卸载时的断开连接(套接字事件监听器也是如此),试一试并告诉我。

这里有一个例子:

http://coma.github.io/react-socket/

var App = React.createClass({
getInitialState: function() {

return {
tweets: []
};
},
onTweet: function(tweet) {

var tweets = this
.state
.tweets
.slice();

tweet.url = 'https://twitter.com/' + tweet.user + '/status/' + tweet.id;
tweet.at = new Date(tweet.at);
tweet.avatar = {
backgroundImage: 'url(' + tweet.img + ')'
};

tweets.unshift(tweet);

this.setState({
tweets: tweets
});
},
renderTweet: function (tweet) {

return (
<li key={tweet.id}>
<a href={tweet.url} target="_blank">
<div className="user">
<div className="avatar" style={ tweet.avatar }/>
<div className="name">{ tweet.user }</div>
</div>
<div className="text">{ tweet.text }</div>
</a>
</li>
);
},
render: function () {

return (
<div>
<ReactSocket.Socket url="http://tweets.socket.io"/>
<ReactSocket.Event name="tweet" callback={ this.onTweet }/>
<ul className="tweets">{ this.state.tweets.map(this.renderTweet) }</ul>
</div>
);
}
});

React.render(<App/>, document.body);

关于node.js - React 和 Socket.io,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31616900/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com