Estoy comprobando si el valor del objeto es una cadena vacía y si el valor está vacío, entonces estoy configurando el valor de advertencia de la variable de estado para esa misma clave como verdadero
const PrimaryEntryDetails = { name: "Pinak", number: 79777777, address: "" } const [warning,setWarning] = useState({ name: false, number: false, address: false }) Object.keys(PrimaryEntryDetails).map((key) => { if(PrimaryEntryDetails[key] === ""){ setWarning({...warning, [key] : !PrimaryEntryDetails[key]}) } })si el valor de la clave PrimaryEntryDetails está vacío, estoy actualizando la variable de estado de advertencia, pero no funciona correctamente.
Creo que usar una lista de nombres de propiedades es más fácil de mantener:
const propertyNames = [ 'productName', 'productMaker', 'model', 'productDescription', 'datePurchase', 'productPrice', ]; const missingProperty = propertyNames.find(name => PrimaryEntryDetails[name] === ''); if (missingProperty) { setWarning({...warning, [missingProperty]: true}); } else { setWarning(WarningProp); onContinue(); }Asumiendo el formato
const PrimaryEntryDetails = { "productName": "Name of product", ....Puede usar .entries sin necesidad de saber o actualizar una lista de nombres
NOTA: Esta versión advertirá sobre TODOS los valores faltantes y no solo se detendrá en el primero
let warnings = 0; Object.entries(PrimaryEntryDetails).forEach(([key, value]) => { if (value.trim() === "") { setWarning({ ...warning, [key]: true }) warnings++; } }) if (warnings === 0) { // assuming the code in your example worked setWarning(WarningProp); onContinue(); }Si desea advertir sobre el primero vacío, use find
let warnings = 0; const entry = Object.entries(PrimaryEntryDetails).find(([key, value]) => value.trim() === "") if (entry) setWarning({ ...warning, [entry[[0]]: true }) else { setWarning(WarningProp); onContinue(); }