Доступ к значениям отдельных объектов из массива объектов React Native - PullRequest
0 голосов
/ 09 января 2020

У меня проблема при попытке получить доступ к некоторым значениям объекта внутри массива, который я получаю в ответ на метод Ax ios Get.

Я хочу получить доступ к таким значениям, как id , dateTime, sensorData каждого объекта массива отдельно, как результат [0] .id (dateTime, sensorData и т. д. c).

Часть моего кода:

const ShowSensorsScreen = ({ navigation }) => {
    const [ result, setResult ] = useState([]);
    const id = navigation.getParam('id');

    useEffect(() => {
        getResult(id);
    }, []);

    const getResult = async id => {
        const response = await searchApi.get(`/sensorData/${id}`);
        setResult(response.data);
    };
    
    console.log(result[0]);
    return (
        <ImageBackground source={backgroundImage} style={styles.ImageBackground}>
            <Bar>
                <Text style={styles.textStyle}>
                    {result[0].dateTime}
                </Text>
            </Bar>
            <SensorsDetail  evaluation={result} />
        </ImageBackground>
    );
};

Используя console.log (результат) или даже console.log (результат [ index ]) все работает нормально, но пытается с результатом [0] .id получает сообщение о том, что undefined не является объектом ...

Пример из console.log (result):

Array []
Array [
  Object {
    "sensorData01": "100.00000",
    "sensorData02": "101.00000",
    "sensorData03": "102.00000",
    "sensorData04": "103.00000",
    "dateTime": "2020-01-06T23:10:56Z",
    "id": 1,
    "idEvaluation": 1,
  },
  Object {
    "sensorData01": "110.00000",
    "sensorData02": "111.00000",
    "sensorData03": "112.00000",
    "sensorData04": "113.00000",
    "dateTime": "2020-01-06T23:11:16Z",
    "id": 2,
    "idEvaluation": 1,
  },
]

И из console.log (результат [0]):

undefined
Object {
  "dadosSensor01": "100.00000",
  "dadosSensor02": "101.00000",
  "dadosSensor03": "102.00000",
  "dadosSensor04": "103.00000",
  "dataHora": "2020-01-06T23:10:56Z",
  "id": 1,
  "idAvaliacao": 1,
}

Я бы хотел поблагодарить вас за любую помощь!

Ответы [ 2 ]

0 голосов
/ 20 января 2020

Итак, я получил помощь из другого поста, и оказалось, что для того, что мне нужно, мне пришлось использовать .map () , и это получилось так:

    const sensor01 = avaliacao.map((item) => item.dadosSensor01);
    const sensor02 = avaliacao.map((item) => item.dadosSensor02);
    const sensor03 = avaliacao.map((item) => item.dadosSensor03);
    const sensor04 = avaliacao.map((item) => item.dadosSensor04);

Если у кого-то есть какой-то лучший способ, я хотел бы услышать это, сейчас я благодарю всех за удивительную поддержку!

0 голосов
/ 09 января 2020

Проблема в том, что setResult (перехватывает) асинхронно c, и вы печатаете result.data до установки состояния. Попробуйте распечатать приведенное ниже, как только вы установите правильные данные в результате.

React.useEffect(() => {
    console.log(result[0]);
  }, [result]);

const searchApi = async (searchAppointment) => {
       console.log('Searching appointment...');
       setIsLoading(true);
       try {
               const response = await baseURL.get(
                   `/sensorsData/${searchAppointment}`);
           console.log(response.data[0]);
           setResult(response.data);
           console.log(result[0])
       } catch (err) {
           console.log(err);
           setErrorMessage('Something went wrong, please try again later...');
       }
       setIsLoading(false);
   };

Пожалуйста, используйте это для обратных вызовов useState - обратных вызовов useState

...