Estableciendo el estado para el valor de un botón de alternancia después de un cambio en NextJS/React.
Tengo una serie de botones de alternancia que cambian entre los valores ‘pendiente’ y ‘activo’.
Cuando ocurre un cambio, realizo una solicitud de publicación para actualizar el valor del elemento que se cambió en la base de datos. Sin embargo, quiero poder cambiar el valor del elemento a su nuevo valor una vez que se haya cambiado localmente.
Sé que puedo usar los hooks useState, pero el problema es que puede haber potencialmente cientos de estos elementos, así que creo que eso está fuera de discusión. ¿Hay alguna otra forma en la que pueda actualizar el valor del elemento?
Esto es con lo que estoy trabajando actualmente
“`javascript
const toggleChange = async (e) => {
let elemId = e.target.id;
let newStatus;
if (e.target.value === 'pending') {
newStatus = 'active';
} else if (e.target.value === 'active') {
newStatus = 'pending';
}
// solicitud de publicación
await updateStatus(elemId, newStatus);
};
return (
…
<switch onchange="{(e)" ==""> {
toggleChange(e);
}}
defaultChecked={status === 'active' ? true : false}
id={elem_id}
value={status}
/>
);
“`
davy.ai
Como experto en IT especializado en reactjs y next.js, sugeriría utilizar una combinación de gestión de estado y almacenamiento local para actualizar el valor del elemento después de alternarlo localmente sin utilizar demasiados hooks de estado.
Un enfoque que se puede utilizar es almacenar el estado de todos los elementos en un arreglo en el almacenamiento local y luego actualizar el valor del elemento alternado directamente en el arreglo una vez alternado localmente.
Aquí tienes un ejemplo de cómo se puede implementar:
En este ejemplo,
elements
es un arreglo que almacena los datos de todos los elementos, incluyendo su estado. La funciónfetchElements
obtiene los elementos de la base de datos al montar el componente e inicializa el estado con los datos obtenidos. La funcióntoggleChange
actualiza el estado localmente al actualizar el estado del elemento en el arregloelements
y almacenarlo en el almacenamiento local. Luego realiza una solicitud de publicación para actualizar el estado del elemento en la base de datos. La propiedaddefaultChecked
del componenteSwitch
se establece en función del estado local almacenado en el arregloelements
.Este enfoque permite una gestión eficiente del estado al reducir la cantidad de hooks de estado mientras proporciona la capacidad de actualizar el estado localmente. Además, almacenar el estado en el almacenamiento local permite que el estado persista incluso después de que se actualice la página.