내 응용 프로그램 기능 중 하나에서 Firebase와 동기화하여 활성 이벤트 목록을 가져옵니다. 이 결과의 주된 결과는 관측 대상이 실시간으로 반복적으로 설정된다는 것을 의미합니다. 이것은 훌륭하지만 MobX 문제가 발생했습니다. 설명하기 위해, 관련 가게에서 살펴 : 여기MobX는 기존 Observable 내부의 값을 기반으로 새로운 Observable을 만들고 참조합니다.
import { observable, computed, autorun, extendObservable, reaction } from "mobx";
import { subscribe } from "./firebase";
class HomeStore {
@observable activeEvents = {};
@observable currentEvents = [];
constructor() {
console.log(this);
// subscribe(root => root.ref("meta/activeEvents"), this.activeEvents, "object");
setTimeout(() => this.currentEvents["RE-VRC-16-1274"] = true, 100);
reaction(
() => Object.keys(this.currentEvents),
events =>
events.map(event =>
this.currentEvents[event] === true ?
subscribe(root => root.ref(`events/${event}`), this.currentEvents[event], "object") :
null
)
);
}
}
export default new HomeStore();
에서, subscribe
기능을합니다 (setTimeout
은 본질적으로 같은 일을) 지정된 관찰에 내 데이터베이스의 특정 부분을 결합합니다. 내가 달성하기 위해 시도하고 같은 수 있습니다 :
subscribe()
기능은 새로운 관찰 가능한을 만들 반응을 유발 this.currentEvents
의 아이의 값을 변경 원래 상태를 저장에 의해 지정된
- 상태는, 비어있는, 데이터베이스의 해당 경로에 구독하십시오.
이 관찰 결과가
subscribe()
에 의해 변경되므로 내 구성 요소의render()
기능이 변경됩니다. 할 매우 쉽게해야처럼이 보인다 소스import { h, Component } from 'preact'; import { List, ListItem, Icon } from 'preact-mdl'; import { observer } from "mobx-observer"; import { icon, center } from "../style"; import HomeStore from "../stores/home"; @observer export default class EventList extends Component { constructor() { super(); this.store = HomeStore; } render() { console.log("EventList Renders", Object.assign({}, this.store.events)); return ( <List> {Object.keys(this.store.currentEvents).map(event => <ListItem two-line> <span class="mdl-list__item-primary-content"> <Icon icon="event" class="material-icons mdl-list__item-avatar" style={icon.avatar}></Icon> <span>{ this.store.currentEvents[event].name ? this.store.currentEvents[event].name : "Loading..." }</span> <span class="mdl-list__item-sub-title">{ event }</span> </span> </ListItem> ) } </List> ); } }
내용은 아래를 참조하십시오, 그러나 나는 고투하고있다. 내가 잘못 했니? 더 나은 접근 방법이 있습니까? 어떤 조언도 환영합니다!