Shared State significa que diferentes métodos trabajan a partir de una misma variable. y, así como aprendimos en clases anteriores, cuando modificamos variables con el mismo objeto de referencia podemos encontrarnos con algunos problemas y obtener resultados inesperados a pesar de ejecutar el mismo código y recibir los mismos parámetros:
// Intento #1const a ={value:2}constaddOne=()=> a.value+=1consttimesTwo=()=> a.value*=2addOne()timesTwo()console.log(a.value)// 6// Sin embargo, si ejecutamos las mismas funciones en orden invertido// obtenemos resultados diferentestimesTwo()addOne()console.log(a.value)// 5 !??
Para resolver este tipo de problemas debemos utilizar la programación funcional, en vez de modificar la variable original, nuestras funciones deben copiar y modificar sus argumentos:
const b ={value:2}constaddOne=x=>Object.assign({}, x,{value: x.value+1})consttimesTwo=x=>Object.assign({}, x,{value: x.value*2})addOne(b)timesTwo(b)// El resultado siempre es el mismo a pesar de// ejecutar las funciones en orden diferentetimesTwo(b)addOne(b)console.log(b.value)