Tendré una lista de objetos que se ingresarán mediante un campo de entrada. Lo tengo funcionando donde creará la lista de objetos, pero cuando intento agregar otro valor a uno de los objetos que ya existen. Simplemente reemplazará el valor anterior dentro de él.
Salida actual cuando consola.log()
const [ tags, setTags ] = useState({ 1: 'hello', 2: 'world', 3: 'goodbye' })Mi salida esperada si la persona 1 agrega la etiqueta 'prueba'.
const [ tags, setTags ] = useState({ 1: ['hello', 'testing'], 2: 'world', 3: 'goodbye' })La función que tengo hasta ahora que está tomando el valor de la entrada. A es un número de identificación y B es la nueva etiqueta.
function updateTags(a, b){ if(tags.hasOwnProperty(a)){ setTags((prevTags) => { return { ...prevTags, [a]: ???? } }) }else{ setTags((prevTags) => { return { ...prevTags, [a]: b } }) }Si necesita más información, por favor hágamelo saber.
Creo que esto debería funcionar
function updateTags(a, b){ if(tags.hasOwnProperty(a)){ setTags((prevTags) => { return { ...prevTags, [a]: Array.isArray(prevTags[a]) ? [...prevTags[a], b] : [prevTags[a], b] } }) } else { setTags((prevTags) => { return { ...prevTags, [a]: b } }) }Creo que puedes usar un enfoque como este:
updateTags = (key, tag) => setTags((prevTags) => ({ ...prevTags, [key]: prevTags[key] ? [prevTags[key], tag].flat() : tag, }));