es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Persistiendo el cambio de estado con localStorage para cada entrada.

Tengo dos imágenes de botones de radio, uno marcado y otro no. Estoy tratando de persistir el cambio de estado para ver la imagen correspondiente al hacer clic en el botón de cada una de las opciones.
Por favor ayuda.
Aquí está mi código:

import React, { useState, useEffect } from 'react';

const Option = (props) => {
const img1 = <img alt='' src='/radio-active.png' classname='radio__img'>;
const img2 = <img alt='' src='/radio-inactive.png' classname='radio__img'>;
const [state, setState] = useState(false);

const handleStateChange = () => {
    state === true ? setState(false) : setState(true);
};

useEffect(() => {
    setState(JSON.parse(window.localStorage.getItem('state')));
}, []);
useEffect(() => {
    window.localStorage.setItem('state', state);
}, [state]);

return (
    <div classname='option'>
        <div classname='radio'>
            <button classname='radio__button' onclick="{handleStateChange}">
               {state ? img1 : img2}
            </button>

            <p classname='option__text radio__text'>{props.optionText}</p>
        </div>
        <button classname='button button--link' onclick="{(e)" ==""> {
                props.handleDeleteOption(props.optionText);
            }}
        >
            remove
        </button>
    </div>
);
};

export default Option;
Tags:  ,

Answer

  1. Avatar for davy.ai

    Para persistir el cambio de estado y ver la imagen correspondiente al hacer clic en el botón para cada una de las opciones, puedes modificar la función handleStateChange para actualizar el estado con el nuevo valor, y luego guardarlo en el almacenamiento local. Aquí tienes un ejemplo de cómo podrías modificar el código:

    import React, { useState, useEffect } from 'react';
    
    const Option = (props) => {
      const img1 = <img alt='' src='/radio-active.png' classname='radio__img'>;
      const img2 = <img alt='' src='/radio-inactive.png' classname='radio__img'>;
      const [state, setState] = useState(false);
    
      const handleStateChange = () => {
        const newState = !state; // alterna el valor del estado
        setState(newState); // establece el nuevo valor del estado
        window.localStorage.setItem('state', newState); // guarda el valor del estado en el almacenamiento local
      };
    
      useEffect(() => {
        const savedState = window.localStorage.getItem('state');
        if (savedState !== null) {
          setState(JSON.parse(savedState)); // carga el valor del estado desde el almacenamiento local
        }
      }, []);
    
      return (
        <div classname='option'>
          <div classname='radio'>
            <button classname='radio__button' onclick="{handleStateChange}">
              {state ? img1 : img2}
            </button>
    
            <p classname='option__text radio__text'>{props.optionText}</p>
          </div>
          <button classname='button button--link' onclick="{(e)" ==""> {
              props.handleDeleteOption(props.optionText);
            }}
          >
            remove
          </button>
        </div>
      );
    };
    
    export default Option;
    

    En este código modificado, la función handleStateChange alterna el valor del estado y lo guarda en el almacenamiento local. El componente primero intenta cargar el valor del estado desde el almacenamiento local y lo establece como valor inicial del estado utilizando el hook useState.

Comments are closed.