【问题标题】:Phoenix + React Native and Redux: Where should I put channel object?Phoenix + React Native 和 Redux:我应该把通道对象放在哪里?
【发布时间】:2017-02-21 11:23:04
【问题描述】:

我有一个名为 PlatformMain 的组件,它目前依赖于在组件文件中定义的 Phoenix 的全局 channel 对象。

let channel;
let socket = new Socket("...", {params: {token: window.userToken}});
socket.connect();


class PlatformMain extends React.Component {
  componentWillMount() {
    this.connectUser();
  }

  connectUser() {
    const { user } = this.props;
    channel = socket.channel("user_pool:" + user.email, { app: APP });
    this.setupChannel();
  }

  setupChannel() {
    channel.join()
      .receive("ok", () => { console.log("Successfully joined call channel") })
      .receive("error", () => { console.log("Unable to join") })

    channel.on("match_found", payload => {
      ...
    });
    ...
}

如果用户按下一个按钮,我希望它能够调度一个动作并将消息推送到频道。

  onPress() {
    console.log("APPROVE_MATCH");
    const { peer, waitForResponse } = this.props;

    approveMatch(peer);
    channel.push("approve_match", { // <------ want to put this somewhere else
      "matched_client_email": peer.email,
    });
  }

我的问题是,如果我想“还原” channel.push 调用,我应该把它放在哪里?在其他地方没有 channel.push(...) 感觉很奇怪,因为它是一个 API 调用。我打算像这样使用 redux-saga 把它放在一个 saga 中:

function* approveMatch(action) {
  const peer = action.payload.peer;
  channel.push("approve_match", { // <------- but how would I get the same channel object?
    "matched_client_email": peer.email,
  });
}

export default function* watchMatchingStatus() {
  yield takeEvery(matchingStatusActions.APPROVE_MATCH, approveMatch);
}

但是我不需要指向同一个通道对象吗?我该怎么做?如果我将channel的初始化放在它自己的文件中,并在多个地方导出和导入它,它不会多次执行文件(并因此多次加入频道)吗?

【问题讨论】:

    标签: reactjs react-native redux phoenix-framework


    【解决方案1】:

    您可以将channel 的初始化放在它自己的文件中并安全地多次导入,模块的评估只发生一次。您可以查看the spec 进行确认:

    如果此模块已被评估,则不执行任何操作。否则,传递评估该模块的所有模块依赖关系,然后评估该模块。

    【讨论】:

      猜你喜欢
      • 2020-09-30
      • 1970-01-01
      • 2016-08-25
      • 2013-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-09
      • 2010-12-24
      相关资源
      最近更新 更多