我怎么能在 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
并在该调用中引用数组内容。
下次尝试在两种环境中测试相同的情况,以确保错误不在您的代码中!
我尝试在 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
并在该调用中引用数组内容。
下次尝试在两种环境中测试相同的情况,以确保错误不在您的代码中!