2017-08-12 1 views
0

ich Laravel Echo-Server verwenden möchten, in native App reagieren aber ich denke, etwas falsch ist, dass ich weiß nicht, was es ist ich diesen Fehler in meinem LogVerwendung Laravel Echo-Server in reagieren nativen Client

undefiniert ist kein Objekt (Auswertung 'this.connector.channel') Kanal D: \ reagieren-native \ taav \ node_modules \ Laravel-echo \ dist \ echo.js: 750: 34 componentDidMount

es ist mein 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']; 
} 

} 

, dass ich meine Laravel Server wissen korrekt ist, weil ich richtig meine Steckdose in Browser

und meine reagieren nativen Code verwenden können:

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() 

     }) 
} 

Antwort

0

Versuchen definieren Ihr Sender als "socket.io" stattdessen und dieser Fehler sollte weggehen:

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

Bearbeiten: Sieht aus, als hätte ich mit der Echo-Bibliothek auch noch mehr Magie gemacht. Aus dem Speicher gab es ein Problem, die Echo-Bibliothek auf "io" zu holen, wenn sie hier importiert wird. Am Ende habe ich den Echo-Code direkt in mein Projekt kopiert und bearbeitet, damit es funktioniert. Wenn Sie echo.js von /node_modules/laravel-echo/dist/echo.js in das eigene Projekt zu kopieren und diese die Datei an den Anfang hinzu:

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

und dies bis zum Ende der Datei:

export default Echo; 

Dann die Codezeile finden, der sagt

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

und ersetzen sie es mit dem folgenden:

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

Dann in Ihrem Code oben importieren Echo von dieser Version in Ihrem Projekt statt von Laravel-Echo werden Sie hoffentlich mehr Glück haben. Tut mir leid, daran habe ich mich nicht erinnert!