Todavía me estoy confundiendo con el operador lógico. Mi caso es que estoy usando el componente React.js como el siguiente:
const Component = () => { const [data, setData] = useState({ date: "", value: "", }) const [disabled, setDisabled] = useState(true); useEffect(() => { if (data.date !== "" && data.value !== "") { setDisabled(false); } else if (data.date === "" || data.value === "") { setDisabled(true); } }, [data.date, data.value]); return <Button disabled={disabled} /> } Entonces, mi caso aquí es que tengo un estado que consta de date y value donde recibo una entrada de un usuario. Si la entrada para uno de los estados ( date o value ) está vacía, quiero que el botón esté deshabilitado. Según tengo entendido, el operador lógico debería ser correcto. Lo que sucede ahora es que el Button se habilitará una vez que se hayan completado ambas entradas. Sin embargo, si vacié uno de los campos, no se deshabilita. Solo cuando vacío ambos campos de entrada, el Button se deshabilitará. ¿Qué estoy haciendo mal aquí? Muchas gracias de antemano
ACTUALIZAR Cómo estoy cambiando el estado es por:
const handleDate = (_, dateString) => { setData({...data, date: dateString}); } <DatePicker onChange={handleDate} /> <InputNumber onChange={(value) => {setData({...data, value: value})} />*Nota: estoy usando Ant Design Input y Datepicker
Puede configurar si no tiene fecha o no tiene valor.
setDisabled(!data.date || !data.value);En lugar de usar
else ifusar
useEffect(() => { if (data.date !== "" && data.value !== "") { setDisabled(false); } else { setDisabled(true); }}, [datos.fecha, datos.valor]);
Supongo que está usando useState correctamente mientras cambia la fecha y el valor. Mantennos informados ;-)
O significa al menos uno de ellos. Y significa ambos simultáneamente.
Entonces su OR (data.date === "" || data.value === "") significa que cuando al menos uno de ellos está vacío, es verdadero; por lo tanto deshabilitado. Y su AND (data.date !== "" && data.value !== "") significa que si ambos no están vacíos simultáneamente, entonces es verdadero, en cualquier otro caso, falso.