Estoy usando Vue 3 con Pinia y quiero usar la API de composición dentro de mis tiendas Pinia. Dada la siguiente tienda de ejemplo
export const useMyStore = defineStore("my", () => { const currentState = ref(0); return { currentState }; } ); Puedo modificar directamente el valor de currentState . No estoy seguro de si este es el camino a seguir o si debería evitar esto y proporcionar algunas funciones de obtención y configuración como
export const useMyStore = defineStore("my", () => { const currentState = ref(false); const readonlyCurrentState = computed((): Readonly<boolean> => currentState.value); function changeState(newState: boolean) { currentState.value = newState; } return { readonlyCurrentState, changeState }; } );La API de opciones resuelve el problema al proporcionar captadores y acciones, así que pensé si debería lograr lo mismo aquí.
Esta podría ser una pregunta basada en una opinión, pero me gustaría saber si debo encapsular el estado currentState para evitar la corrupción por accidente.
Puedo modificar directamente el valor de
currentState
Sí, esto es intencional. Como se describe en comparación con Vuex
las mutaciones ya no existen. Muy a menudo se los percibía como extremadamente detallados. Inicialmente trajeron la integración de devtools, pero eso ya no es un problema.
Esta es una razón más técnica, pero puede leer más del propio autor (y de las personas a las que no les gusta esta nueva "libertad") en esta discusión: agregue una opción para no permitir la modificación directa del estado del componente
En general, el código en su pregunta demuestra el punto perfectamente: mucho código innecesario solo para cambiar el valor booleano simple. Por supuesto, hay casos en los que los datos son más complejos, desea imponer algunas restricciones, etc., donde la mutación directa sin restricciones puede considerarse peligrosa. Creo que el patrón en su pregunta es perfectamente viable y puede encontrar más ideas (y compromiso de soporte de "modo estricto" experimental esperando comentarios) en la discusión vinculada
Personalmente, creo que muchas de las comprobaciones de seguridad se pueden realizar con pelusa y, especialmente, con definiciones de TypeScript. Obtiene la seguridad adicional durante el desarrollo sin pagar el precio en tiempo de ejecución (en términos de ejecución de código adicional y empaquetado y servicio). Lo bueno de Pinia es que nos da la opción de cómo abordar el problema...