¿Cuál es la diferencia entre autorun y reaction ? Estoy buscando una explicación completa que ayude a decidir cuándo usar cuál. ¿Es posible que la reaction pueda incluso activarse mientras que autorun no lo hace? ¿Cómo se relacionan entre sí?
¿Son ambos iguales?
autorun(() => { localStorage.setItem("current_order", JSON.stringify(this.currentOrder)) }) reaction( () => JSON.stringify(this.currentOrder), (json) => { localStorage.setItem("current_order", json) } ) Hasta donde yo sé, el primer parámetro de reaction evaluará y verificará los cambios, por lo que se desea para los valores calculados, pero ¿no debería funcionar bien autorun si this.currentOrder es observable? ¿Se JSON.stringify(this.currentOrder) en reaction , incluso cuando this.currentOrder sea observable y no haya cambiado?
autorun se ejecuta inmediatamente después de que se inicializó, la reaction se ejecuta solo después de que la expresión de datos haya cambiado después de la inicialización.
Además, debido a reaction se ejecuta solo cuando cambia la expresión de datos, puede usar otros observables en la función de efecto, lo que no funcionaría para autorun porque se suscribe a todos los observables que usa dentro de ella, lo que significa que la reaction brinda un control más detallado.
EDITAR:
Agregando un ejemplo para que quede más claro
Considere este ejemplo, tiene dos observables A y B, y quiere hacer algo con B cuando A cambia, pero no quiere hacer nada cuando B cambia. Si solo hace que se ejecute autorun , se ejecutará cuando cambie cualquiera de los observables, por lo que no es lo que desea. Pero con la reaction , solo es posible reaccionar a los cambios de A (solo usando A en la función de expresión).