He desarrollado una forma de varios pasos en react. Cuando creo la opción de selección múltiple en el formulario, el valor no se guarda en los estados. Estoy usando ganchos. Cuando selecciono opciones y hago clic en la página siguiente, los valores no se guardan en la matriz. Aquí está mi código:
import React, { useState } from 'react';
import Select, { components } from 'react-select';
const UserDetails = ({ setForm, formData, navigation }) => {
const techCompanies = [
{ label: "Apple", value: 1 },
{ label: "Facebook", value: 2 },
{ label: "Netflix", value: 3 },
{ label: "Tesla", value: 4 },
{ label: "Amazon", value: 5 },
{ label: "Alphabet", value: 6 },
];
const [selectedOption,setselectedOption] = useState([]);
const [newarray,setarray]=useState([]);
const handleChange = (selectedOption) => {
setselectedOption(newarray.concat(selectedOption))
console.log(setselectedOption)
}
console.log(selectedOption)
const { next } = navigation;
return(
<div className="row justify-content-center mt-5">
<form>
<h1 className="text-center prox_bold">Enter User Details</h1>
<Select
options={ techCompanies }
isMulti
onChange={handleChange}
value={selectedOption}/>
<div className="row justify-content-center mt-5">
<button className="btn green_btn w250 font22" onClick={next}>
Next
</button>
</div>
</form>
</div>
);
}
export default UserDetails;
El estado es local al UserDetails
componente. Cualquiera que sea la lógica en la que tenga next()
parece estar renderizada de forma selectiva UserDetails
según el paso que haya alcanzado el usuario.
Esto es un problema porque cuando el usuario pasa al siguiente paso, su UserDetails
se desmonta y se destruye y, por lo tanto, pierde su estado.
La solución es tener la selectedOption
matriz como accesorio activado UserDetails
, moverlo handleChange
hacia arriba al componente principal y tenerlo como accesorio activado UserDetails
también. Almacenar selectedOption
en el estado del componente principal que no se desmonta al cambiar de paso.
<UserDetails ... selectedOption={parentStateSelectedOption} handleChange={handleChange} />
En el <Select />
:
<Select ... value={parentStateSelectedOption} onChange={handleChange}
^ parent handleChange not local
En su componente principal, coloque el handleChange
evento para que se almacene en el estado principal.
Ahora, cuando el usuario pasa a la siguiente pantalla, ha almacenado de forma segura las opciones seleccionadas en el estado principal.
Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.
En caso de infracción, por favor [email protected] Eliminar
Déjame decir algunas palabras