Tengo un sitio web de redes sociales donde a los usuarios les pueden gustar/no gustar las publicaciones. Tengo un reductor para el usuario y las publicaciones. Mi compañero de grupo implementó la función Me gusta/No me gusta de la siguiente manera: cada vez que al usuario le gusta una publicación, el cliente llama a mi API con ENDPOINT 'publicaciones/:id/me gusta', lo que incrementará el recuento de Me gusta para la publicación en la base de datos de publicaciones y agregará la publicación en la matriz de publicaciones que le gustan al usuario en la base de datos de usuarios. La API devolverá una respuesta que contiene el usuario y la publicación actualizados, lo que dará como resultado las siguientes acciones.
dispatch({ type: LIKE_POST_SUCCESS, payload: res.payload.post }) dispatch({ type: UPDATE_USER_SUCCESS, payload: res.payload.user })Y los siguientes reductores
case LIKE_POST_SUCCESS: return { ...state, ...action.payload } case UPDATE_USER_SUCCESS: return { ...state, ...action.payload }Este enfoque funciona, pero siento que su enfoque parece pirateado en ese sentido.
¿Sería el enfoque correcto
Según su pregunta, lo que debe hacerse es básicamente cuando al usuario le gusta una publicación, la base de datos de publicaciones debe actualizarse primero, y solo después de su respuesta exitosa, debe actualizar la base de datos del usuario. Entonces, el enfoque que mencionaste parece ser el correcto a seguir.
Sí, estoy de acuerdo con tu enfoque, y sí, su enfoque es hackish.
En mi opinión, si el POST falla, mantiene el envío a la tienda. Lo que daría como resultado datos erróneos. O si la API de backend devuelve el código de estado 201 pero tiene un error, por ejemplo, el usuario no se actualizó en el backend pero en el frontend se supone que el usuario se actualizó. Por lo tanto, daría como resultado datos incorrectos en el lado de la interfaz.