2016-08-19 3 views
2
асинхронные

Привет Я использую MobX в магазине и мне нужно, чтобы иметь реакцию асинхронной, когда вычисленное значение изменилось:MobX реакция

class Store { 
    @observable user; 
    @observable something; 

    @computed get firstParam() { 
     return this.user && this.user.params[0]; 
    } 

    async loadSomething() { 
     reaction(
       () => this.firstParam, 
       async (param) => { 
        const { data: something } = await axios.get(`url/${param}`); 

        runInAction('update state after fetching something',() => { 
         this.something = something; 
        }); 
       } 
      ); 
    } 

} 

мне было интересно, что будет разница здесь с помощью when вместо от reaction помимо условий работы?

when(
    () => !!this.firstParam, 
    async() => { 
     // fetch using this.firstParam 
    } 
) 

ответ

5

Обратите внимание, что when выполняет только его действие , а затем останавливается. Поэтому в вашем случае данные будут извлекаться только один раз.

2
 reaction(
      () => this.firstParam, 
      async (param) => { 
       const { data: something } = await axios.get(`url/${param}`); 

       runInAction('update state after fetching something',() => { 
        this.something = something; 
       }); 
      } 
     ); 

Это будет отслеживать только this.firstParam и когда возвращающие новые данные, которые он будет вызывать

  async (param) => { 
      const { data: something } = await axios.get(`url/${param}`); 

      runInAction('update state after fetching something',() => { 
       this.something = something; 
      }); 

Теперь, если вы идете с when Я считаю, что в конечном итоге делает то же самое, Взято из mobx docs:

Вы можете использовать наблюдаемые структуры данных в качестве обещания ... После завершения асинхронного действия просто обновите свои данные

Так что я не вижу причин, почему бы не использовать when в вашем случае.

Смежные вопросы