如何使用带有刺激反射和视图组件的自定义动作通道?

How can I use a Custom Channel of Action Cable with Stimulus Reflex and View Component?

所以,我正在开发一个项目,该项目应该有一个与 linkedin 聊天相同的聊天组件,用户将在其中拥有他们的所有联系人和消息。

但是,我尝试了所有与 stimulus_reflexview_component 合作的方法来创建这个 chat_box,但直到现在我取得了 none 的进展。

所以现在我正在尝试与纯 action_cable 聊天,但我的疑问是:我可以将此 action_cable 频道 ('ChatRoom')Stimulus Reflex 一起使用吗?因为当我们看到 rails 控制台显示如下内容时:Broadcasting to StimulusReflex::Channel:1,我想广播到 ChatRoom Channel.

有人被试过吗?

stimulus_reflex会在反射后使用自己的频道更新页面。但是这些更新是自动发生的,并且只针对触发反射的用户。通常你不想碰那些部分。

如果您想在反射后广播消息或 dom 转换,您可以使用 cable_ready(包含在 stimulus_reflex.

所以这样的东西可能对你有用:

def my_reflex
  @chat = Chat.find(element.dataset[:chat_id])
  message = @chat.message.create(message: element.value)
  cable_ready["chatroom-#{@chat.id}"]. insert_adjacent_html(
    selector: "#chat",
    position: "beforeEnd",
    html: ApplicationController.render(ChatMessageComponent.new(message: message))                     
  )
end

有关更多可能性,您可以查看 cable_ready documentation

我还不能发表评论,所以我必须把它写成答案。罗兰似乎错过了 cable_ready 行动的实际广播。

def my_reflex
  @chat = Chat.find(element.dataset[:chat_id])
  message = @chat.message.create(message: element.value)
  cable_ready["chatroom-#{@chat.id}"]. insert_adjacent_html(
    selector: "#chat",
    position: "beforeEnd",
    html: 
   ApplicationController.render(ChatMessageComponent.new(message: message))                     
  )

  cable_ready.broadcast
end