我怎么能在 nodejs 而不是浏览器中使用 mobx?

How could I use mobx in nodejs but not browser?

我尝试在 nodejs 中使用 mobx,但脚本不起作用。

(async function () {
  const mobx = require('./mobx.umd.min.js')
  // example 2, array of primitives
  // observes computed value, works
  const { observable, computed, autorun } = mobx;

  var numbers = observable([1, 2, 3]);
  autorun(() => {

    console.log(numbers);
  });
  numbers.push(4); //autorun does not trigger
  numbers.push(4); //autorun does not trigger
})();

但脚本在浏览器中有效:

<!DOCTYPE html>
<html lang="en">
  <body>
    <div id="app"></div>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/mobx/5.15.4/mobx.umd.min.js"></script>
    <script type="module">
      // example 2, array of primitives
      // observes computed value, works
      const { observable, computed, autorun } = mobx;

      var numbers = observable([1, 2, 3]);
      autorun(() => {
        window.numbers = numbers;
        const app = document.querySelector("#app");
        console.log(`numbers`, numbers);
        app.innerHTML = "<p>" + numbers.join(", ") + "</p>";
      });
      numbers.push(4); //autorun does not trigger
    </script>
  </body>
</html>

我想在nodejs中使用mobx,如何在nodejs中直接使用mobx?

您在 Node.js autorun 中引用了 numbers 数组,但您没有更改它,因此没有理由将 MobX 改为 autorun。观察者(例如 autorun、computed、observer 等)仅在发生变化时做出反应。

您只更改了数组内容,而不是数组本身。所以如果你的代码是这样的:

  autorun(() => {
    console.log(numbers.map(x => x);
  });

它会按预期工作,因为这里你实际上引用了数组内容。浏览器版本有效,因为您正在使用 numbers.join 并在该调用中引用数组内容。

下次尝试在两种环境中测试相同的情况,以确保错误不在您的代码中!