首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以观察特定映射条目的mobx-state-tree事件

是否可以观察特定映射条目的mobx-state-tree事件
EN

Stack Overflow用户
提问于 2021-02-14 13:40:49
回答 1查看 80关注 0票数 1

是否可以这样做:

代码语言:javascript
复制
observe(props.store.zone.players[props.socket_id], (change) => {

  ...

})

我想要监听组件的每个特定实例上的事件。

以下是区域存储:

代码语言:javascript
复制
const ZoneState = types
  .model({
    name: types.optional(types.string, ""),
    players: types.map(PlayerState),
  })
  .actions((self) => ({
    syncPlayer(params) {
      const player = self.players.get(params.id);
      const oldPlayerData = toJS(player);
      self.players.put(params);
    },

  }));

还有播放器商店

代码语言:javascript
复制
import { types } from "mobx-state-tree";

const PlayerState = types
  .model({
    id: types.identifier,
    socket_id: types.optional(types.string, ""),
    x: types.integer,
    z: types.integer,
    name: types.optional(types.string, "Unknown One"),
  })
  .actions((self) => ({
    sync(params) {
      self.x = params.x;
      self.z = params.z;
    },
  }));

export default PlayerState;
EN

回答 1

Stack Overflow用户

发布于 2021-02-15 23:54:33

例如,您可以使用observeautorun在特定映射条目更改时运行一些代码。

示例

代码语言:javascript
复制
// ...

const zoneState = ZoneState.create();

zoneState.syncPlayer({ id: "1", socket_id: "1", x: 1, z: 2, name: "test" });

observe(zoneState.players.get("1"), (change) => {
  console.log("observe", change);
});

autorun(() => {
  console.log("autorun", zoneState.players.get("1"));
});

zoneState.syncPlayer({ id: "1", socket_id: "1", x: 1, z: 2, name: "test 2" });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66192761

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档