В Mobx, так же как и компонент Observer
, который обеспечивает обратный вызов функции рендеринга, функция autorun
также выполняется независимо от жизненного цикла реакции.
Это происходит потому, что в качестве наблюдаемой переменной у вас есть число пользователей .
Согласно документам MOBX-реагирует
Observer - это компонент React, который применяет наблюдателя к анонимному
регион в вашем компоненте. Для детей требуется один, без аргументов
функция, которая должна возвращать ровно один компонент React.
рендеринг в функции будет отслеживаться и автоматически
перерисовывается при необходимости.
и документы MOBX
Когда используется autorun
, предоставленная функция всегда будет срабатывать
один раз сразу, а потом снова каждый раз одна из его зависимостей
изменения.
Вы можете подтвердить это значение, войдя непосредственно в функциональный компонент, и вы заметите, что компонент отображается только один раз
РЕДАКТИРОВАТЬ:
Чтобы ответить на ваш вопрос
Если я изменю useEffect
на
React.useEffect(autorun(() => {console.log("inside autorun", user.count)}));
в основном удаляет анонимную функцию из useEffect
и просто передает
автозапуск напрямую, тогда он запускается только один раз. Почему это так? Что такое
разница?
Разница в том, что autorun
возвращает disposer function
, который при запуске избавится от autorun
и больше не будет его выполнять.
Из документов:
Возвращаемое значение из автозапуска - это функция disposer, которая может быть
используется для удаления автозапуска, когда он вам больше не нужен.
Теперь происходит следующее: поскольку useEffect выполняет обратный вызов, предоставленный ему при запуске, выполняемый обратный вызов - это функция disposer
, возвращаемая функцией автозапуска, которая по существу отменяет ваш автозапуск.