如何解决是否可以观察特定地图条目的 mobx-state-tree 事件
是否可以这样做:
observe(props.store.zone.players[props.socket_id],(change) => {
...
})
我想监听组件的每个特定实例上的事件。
这里是 Zone 商店:
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);
},}));
和播放器商店
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;
解决方法
你可以例如使用 observe
或 autorun
在特定地图条目更改时运行一些代码。
示例
// ...
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",name: "test 2" });
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。