UseState получает только последнее значение

Я изучаю реакцию JS, и в этом случае я пытаюсь назначить пассажиров переменной, чтобы позже я мог зациклить их имя, идентификатор..

Я получаю данные из formdata из другого файла: -Имя -Имя -ИДЕНТИФИКАТОР

Я получаю данные из переменной «datos», поэтому, если в моем цикле for я получаю datos.nombre правильным способом, но при консольной регистрации pasajero регистрируется только последний человек.

 const { state } = useLocation();
    const [datos] = useState(state);
    const [pasajero, setPasajero] = useState({})

    useEffect(() => {
        for (let i = 0; i < datos.length; i++) {
            setPasajero((prev) => ({
                ...prev,
                nombre: datos.nombres[i],
                apellido: datos.apellidos[i],
                DNI: datos.DNI[i],
            }));
        }

    },[]);

    console.info(pasajero)

в моем цикле for я пытался назначить пассажира, но получаю последнее значение, когда хочу получить каждого человека в этом цикле for

pasajero состоянию нравятся производные данные, оно не должно быть состоянием и вам не нужен эффект, см. response.dev/learn/…
Lin Du 05.08.2024 09:42

Почему useState [datos] — это состояние useLocation?

S.Marx 05.08.2024 09:50

Я использую useLocation, потому что собираю данные, переданные из другого компонента: navigate('/datos', { state: { nombres: nombres, apellidos: apellidos, DNI: DNI, length: nombres.length, precio: precio } } `

Annie 05.08.2024 09:54

Я получил это сейчас! удалил useEffect, создал пустой массив и поместил данные внутрь этого пустого массива, используя имеющийся у меня цикл for вместо использования useState: D Извините, это немного сбивает с толку.

Annie 05.08.2024 09:56
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
4
70
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Изменил его, создав пустой массив, а затем отправив данные во время перебора моих данных с помощью цикла for. Он работает для того, для чего я этого хотел (отображение информации о пассажире) для оплаты (которой явно не существует в этом проекте :D)

const { state } = useLocation();
const datos = state;
const pasajeros = [];

for (let i = 0; i < datos.length; i++) {
    pasajeros.push({ nombre: datos.nombres[i], apellidos: datos.apellidos[i], DNI: datos.DNI[i] })
}
console.info(pasajeros)

импортировать {useState} из «реагировать»; импортировать {useLocation} из 'реагировать-маршрутизатор-дом'; const MyComponent = () => {const {state} = useLocation(); const [датос] = useState (состояние); const pasajeros = datos.map((_, index) => ({ nombre: datos.nombres[индекс], apellidos: datos.apellidos[индекс], DNI: datos.DNI[индекс], })); console.info(пасахеро); return ( <div> {/* Отобразите здесь данные о пасахеро */} </div> ); } экспортировать MyComponent по умолчанию;

Mateen Ali 05.08.2024 10:13

Этот подход проще и позволяет избежать ненужной сложности управления состоянием, когда данные статичны и получены непосредственно из реквизита или состояния местоположения.

import React from 'react';
import { useLocation } from 'react-router-dom';

const YourComponent = () => {
    const { state } = useLocation();
    const datos = state;

    const pasajeros = datos.nombres.map((_, index) => ({
        nombre: datos.nombres[index],
        apellido: datos.apellidos[index],
        DNI: datos.DNI[index],
    }));

    console.info(pasajeros);

    return (
        <div>
            {pasajeros.map((pasajero, index) => (
                <div key = {index}>
                    <p>Nombre: {pasajero.nombre}</p>
                    <p>Apellido: {pasajero.apellido}</p>
                    <p>DNI: {pasajero.DNI}</p>
                </div>
            ))}
        </div>
    );
};

export default YourComponent;

Здесь нет необходимости использовать состояние и эффект.

AKX 05.08.2024 10:12

пожалуйста, проверьте еще раз

Mateen Ali 05.08.2024 10:16

«Этот подход проще» — это субъективно, если вы не можете указать, насколько он проще.

DarkBee 05.08.2024 10:22

Трудно понять, насколько «проще» в 4 раза больше строк кода.

TylerH 09.08.2024 16:00

Другие вопросы по теме