• Transaction(事务)

    Transaction(事务)

    Transaction 是底层 API,在绝大多数场景下 actionrunInAction 会是更好的选择

    transaction(worker: () => void) 可以用来批量更新,在事务结束前不会通知任何观察者。
    transaction 接收一个无参数的 worker 函数作为参数并运行它。
    这个函数完成运行前不会通知任何观察者。
    transaction 返回 worker 函数返回的任何值。
    注意 transaction 完全是同步运行的。
    Transactions 可以嵌套。只有在完成最外面的 transaction 后,其他等待的 reaction 才会运行。

    1. import {observable, transaction, autorun} from "mobx";
    2. const numbers = observable([]);
    3. autorun(() => console.log(numbers.length, "numbers!"));
    4. // 输出: '0 numbers!'
    5. transaction(() => {
    6. transaction(() => {
    7. numbers.push(1);
    8. numbers.push(2);
    9. });
    10. numbers.push(3);
    11. });
    12. // 输出: '3 numbers!'