React和Socket.io

时间:2015-07-24 17:58:12

标签: node.js socket.io reactjs

我正在尝试使用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 startio is undefined时收到错误。我认为,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 个答案:

答案 0 :(得分:4)

数目:

1)不,你不需要指定IP,你甚至可以使用/它将通过默认的HTTP 80端口,无论如何,你可以在套接字上找到更多的例子。 io site。

2)也需要io,请记得将socket.io-client添加到您的包裹中:

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

无论如何,如果你想要将socket.io服务器提供的客户端脚本作为静态文件包含在内,那么请记住使用<script/>标记将其添加到HTML中,这样你就可以<强大> io 在全球范围内避免了需求部分,但是,我更愿意要求它。

现在,关于......

尝试我的lib: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);