<commit_before># MobX 会对什么作出反应?

MobX 通常会对你期望的东西做出反应。
这意味着在90％的场景下，mobx “都可以工作”。
然而，在某些时候，你会遇到一个情况，它可能不会像你所所期望的那样工作。
在这个时候理解 MobX 如何确定对什么有反应就显得尤为重要。

> MobX 会对在执行跟踪函数期间读取的任何**现有的可观察属性**做出反应。

* **“读取”** 是对象属性的间接引用，可以用过 `.` (例如 `user.name`) 或者 `[]` (例如 `user['name']`) 的形式完成。
* **“可追踪函数”** 是 `computed` 表达式、observer 组件的 `render()` 方法和 `when`、`reaction` 和 `autorun` 的第一个入参函数。
* **“其间(during)”** 意味着只追踪那些在函数执行时被读取的 observable 。这些值是否由追踪函数直接或间接使用并不重要。

换句话所，MobX 不会对其作出反应:
 * 从 observable 获取的值，但是在追踪函数之外
 * 在异步调用的代码块中读取的 observable

## MobX 追踪属性访问，而不是值

用一个示例来阐述上述规则，假设你有如下的 observable 数据结构(默认情况下 `observable` 会递归应用，所以本示例中的所有字段都是可观察的)。

```javascript
let message = observable({
    title: "Foo",
    author: {
        name: "Michel"
    },
    likes: [
        "John", "Sara"
    ]
})
```

在内存中看起来像下面这样。 绿色框表示**可观察**属性。 请注意，**值** 本身是不可观察的！

![MobX reacts to changing references](../images/observed-refs.png)

现在 MobX 基本上所做的是记录你在函数中使用的是哪个**箭头**。之后，只要这些箭头中的其中一个改变了(它们开始引用别的东西了)，它就会重新运行。

## 示例
<commit_msg>修正错别字 所->说<commit_after># MobX 会对什么作出反应?

MobX 通常会对你期望的东西做出反应。
这意味着在90％的场景下，mobx “都可以工作”。
然而，在某些时候，你会遇到一个情况，它可能不会像你所所期望的那样工作。
在这个时候理解 MobX 如何确定对什么有反应就显得尤为重要。

> MobX 会对在执行跟踪函数期间读取的任何**现有的可观察属性**做出反应。

* **“读取”** 是对象属性的间接引用，可以用过 `.` (例如 `user.name`) 或者 `[]` (例如 `user['name']`) 的形式完成。
* **“可追踪函数”** 是 `computed` 表达式、observer 组件的 `render()` 方法和 `when`、`reaction` 和 `autorun` 的第一个入参函数。
* **“其间(during)”** 意味着只追踪那些在函数执行时被读取的 observable 。这些值是否由追踪函数直接或间接使用并不重要。

换句话说，MobX 不会对其作出反应:
 * 从 observable 获取的值，但是在追踪函数之外
 * 在异步调用的代码块中读取的 observable

## MobX 追踪属性访问，而不是值

用一个示例来阐述上述规则，假设你有如下的 observable 数据结构(默认情况下 `observable` 会递归应用，所以本示例中的所有字段都是可观察的)。

```javascript
let message = observable({
    title: "Foo",
    author: {
        name: "Michel"
    },
    likes: [
        "John", "Sara"
    ]
})
```

在内存中看起来像下面这样。 绿色框表示**可观察**属性。 请注意，**值** 本身是不可观察的！

![MobX reacts to changing references](../images/observed-refs.png)

现在 MobX 基本上所做的是记录你在函数中使用的是哪个**箭头**。之后，只要这些箭头中的其中一个改变了(它们开始引用别的东西了)，它就会重新运行。

## 示例

{'fraction_non_alphanumeric': 0.16541353383458646, 'fraction_numerical': 0.0020050125313283208, 'mean_word_length': 5.631229235880399, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 6, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1156454', 'n_tokens_mistral': 1437, 'n_tokens_neox': 1563, 'n_words': 151}