码迷,mamicode.com
首页 > 其他好文 > 详细

[MST] Derive Information from Models Using Views

时间:2018-01-25 00:15:34      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:imp   self   power   intro   blog   ant   type   res   with   

Redundant data or caching data is a constant source of bugs. MST adheres to the philosophy that no data that can be derived should ever get stored. In this lesson, you will learn how to introduce views that declaratively derive data and which cache data smartly.

In this lesson you will learn:

  • How to introduce views on models
  • That computed properties are powered by Mobx computed fields
  • How to combine MST with Mobx utilities like reaction

To learn more about MobX basics check out my course, Manage Complex State in React Apps with MobX

 

Inside ‘views‘, you can do calculation based on the model:

export const WishList = types
    .model({
        items: types.optional(types.array(WishListItem), [])
    })
    .actions(self => ({
        addItem(newItem) {
            // Model is immutable object, it is ok to do push here.
            self.items.push(newItem);
        }
    }))
    .views(self => ({
        get totalPrice() {
            return self.items.reduce((acc, curr) => curr.price + acc, 0)
        }
    }));

 

import {WishList, WishListItem} from "./WishList"
import {reaction} from ‘mobx‘

it(‘should calculate the total price of a wishlist‘, function () { let changes = 0; const list = WishList.create(); reaction(() => list.totalPrice, () => changes++) list.addItem({ name: ‘Amazon‘, price: 30 }); expect(list.totalPrice).toEqual(30); expect(changes).toEqual(1) list.addItem({ name: ‘DJ‘, price: 12 }); expect(list.totalPrice).toEqual(42); expect(changes).toEqual(2) list.items[0].changePrice(28); expect(list.totalPrice).toEqual(40); expect(changes).toEqual(3) list.items[0].changeName("Amazon cn"); expect(changes).toEqual(3) });

 

[MST] Derive Information from Models Using Views

标签:imp   self   power   intro   blog   ant   type   res   with   

原文地址:https://www.cnblogs.com/Answer1215/p/8343778.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!