0

我想在反应本机应用程序中使用 laravel 回显服务器,但我认为出了点问题,我不知道是什么我在日志中收到此错误

undefined 不是对象(评估 'this.connector.channel')通道 D:\react-native\taav\node_modules\laravel-echo\dist\echo.js:750:34 componentDidMount

这是我的 laravel

class updateStatus implements  ShouldBroadcast
{
use Dispatchable, InteractsWithSockets, SerializesModels;

/**
 * Create a new event instance.
 *
 * @return void
 */

public $activity;
public function __construct( Activity $a)
{
    //

    $this->activity=$a;

}

/**
 * Get the channels the event should broadcast on.
 *
 * @return Channel|array
 */
public function broadcastOn()
{
    return ['channel'];
}

}

我知道我的 laravel 服务器是正确的,因为我可以在浏览器中正确使用我的套接字

和我的反应本机代码:

import React, {Component} from 'react';

 import Echo from "laravel-echo"
  import io from 'socket.io-client/dist/socket.io';

 export default class Activities extends Component {

constructor(props) {
    super(props)
    this.btnadd = this.btnadd.bind(this)
    this.SearchMethod = this.SearchMethod.bind(this)
    this.socket = io('http://'.concat(server).concat(':6001'), {json: false})

}
 componentDidMount() {


    var echo = window.Echo = new Echo({
        broadcaster: 'io',
        host: 'http://'.concat(server).concat(':6001')
    });

    window.Echo.channel('channel')
        .listen('updateStatus', (e) => {
            // this.additem()

        })
}
4

1 回答 1

-1

尝试将您的广播器定义为“socket.io”,该错误应该会消失:

var echo = window.Echo = new Echo({
    broadcaster: 'socket.io',
    host: 'http://'.concat(server).concat(':6001')
});

编辑:看起来我还用回声库做了更多的魔法。从记忆中,在将 Echo 库导入此处时,它无法拾取“io”。我最终做的是将 Echo 代码直接复制到我的项目中并对其进行编辑以使其工作。如果您将 echo.js 从 /node_modules/laravel-echo/dist/echo.js 复制到您自己的项目中,并将其添加到文件的开头:

window.navigator.userAgent = 'react-native';
var io = require('socket.io-client');

这到文件的末尾:

export default Echo;

然后找到那行代码

this.socket = io(this.options.host, {...this.options, ...{jsonp: false}});

并将其替换为以下内容:

this.socket = io(this.options.host, this.options);

然后在您上面的代码中,从项目中的这个版本而不是从 laravel-echo 中导入 Echo,希望您会有更好的运气。对不起,我不记得开始了!

于 2017-08-16T19:51:15.880 回答