Tengo un problema para encontrar una solución sobre cómo llenar una matriz anidada vacía usando el enlace useState. Soy un principiante de reacción y podría perderme algo. En los pasos siguientes intentaré resumir el problema.
1.) Recibo este formato de datos como accesorios - {pregunta}:
{ category: "General Knowledge" correct_answer: "Arby's" difficulty: "easy" incorrect_answers: (3) ['McDonald's', 'Burger King', 'Wendy's'] question: "In which fast food chain can you order a Jamocha Shake?" type: "multiple" } value: "Opel", isClicked: false, isCorrect: true, incorrect_answers: [ {isClicked: false, value: "Bugatti"}, {isClicked: false, value: "Bentley}, {etc...} ] useEffect(() => { const obj = { value: question.correct_answer, isClicked: false, isCorrect: true, incorrect_answers: [] } question.incorrect_answers.map((item) => obj.incorrect_answers.push({ value: item, isClicked: false, }) ) setAnswers(obj) }, [])a) Uso useState para configurar el estado y su estructura de datos para las respuestas obj.
const [answers, setAnswers] = useState({ value: question.correct_answer, isClicked: false, isCorrect: true, incorrect_answers: [ //I want multiple objects {value: '...', isClicked: ...}, // Would be nice if I was able to insert objects in this a) step. ] })b) Quizás en useEffect o en alguna otra función quiero llenar la matriz incorect_answers con objetos.
useEffect(() => { // c) Im accesing the answers state and filling incorect_answers with obj setAnswers(prevState => { return { ...prevState, incorrect_answers: [{ value: question.incorrect_answers.map((item) => item), isClicked: false, isCorrect: false }] } }) // d) my output: /* { value: "Opel", isClicked: false, isCorrect: true, incorrect_answers: [ {isClicked: false, value: [bugatti, bentley, bmw, citroen]}, ] } */ }, [])Si está utilizando el map , no debe ignorar la respuesta del mismo, y no necesita push la matriz
useEffect(() => { const obj = { value: question.correct_answer, isClicked: false, isCorrect: true, incorrect_answers: question.incorrect_answers.map(item => ({ value: item, isClicked: false })) } setAnswers(obj) }, [])Se puede usar el mismo método al completar su estado por primera vez.
const [answers, setAnswers] = useState({ value: question.correct_answer, isClicked: false, isCorrect: true, incorrect_answers: question.incorrect_answers.map(item => ({ value: item, isClicked: false })) })