React ActionCable Provider createConsumer函数不起作用?

时间:2018-08-13 19:55:49

标签: ruby-on-rails reactjs actioncable

我正在构建一个应用程序,并决定将ActionCable用于websocket。我的目标是跟踪Actioncable中的每个用户,以便当他们取消订阅/关闭窗口时,可以将他们从运行列表中删除。用户加入时没有问题,我将他们推送到列表中;但是,我似乎无法建立允许我设置current_user属性的连接。这是显示的错误。 ActionCable createConsumer is not a function

这是我尝试实现它的代码。

import { ActionCableProvider, ActionCable } from 'react-actioncable-provider'
import App from '../App'

import React from 'react';

const cable = ActionCable.createConsumer('ws://localhost:3000/cable')
export default function Container (props) {
    return (
        <ActionCableProvider cable={cable}>
            <App />
        </ActionCableProvider>
    )
}

我的后端看起来像这样。 //app/channels/lobbies_channel.rb

 class LobbiesChannel < ApplicationCable::Channel

  def subscribed
    @lobby = Lobby.find(params[:lobby_id])
    stream_for @lobby
  end

  def unsubscribed
    # Any cleanup needed when channel is unsubscribed
  end
end

这是我的connection.rb文件,由于尚未被触发或到达byebug,所以我尚未建立该文件。

 module ApplicationCable
  class Connection < ActionCable::Connection::Base
    identified_by :current_user
  end

  def connect
    byebug
    self.current_user = find_verified_user
  end

  private

  def find_verified_user
    byebug
  end
end

// routes.rb

Rails.application.routes.draw do
  resources :lobbies, only: [:index, :create, :destroy]
  resources :users, only: [:create, :update, :destroy]
  post '/available' => 'lobbies#checkAvail'
  post '/joinlobby' => 'lobbies#joinLobby'
  mount ActionCable.server => '/cable'
end

有人可以帮助我设置动作电缆提供商以触发连接文件吗?

1 个答案:

答案 0 :(得分:0)

您需要从ActionCable包中导入actioncable。如果您看,ActionCable导出的react-actioncable-provider实际上是一个React组件,而不是库:

import ActionCable from 'actioncable'
import ActionCableProvider from 'react-actioncable-provider'
import App from '../App'
import React from 'react'

// ...