Реакция useContext - доступ к вложенному объекту (не определено) - PullRequest
1 голос
/ 07 марта 2020

Я бэкэнд-парень, пытаюсь запустить самое первое приложение реакции / JS.

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

user это вложенный объект, например, так: user

Я могу получить доступ к объектам первого уровня, как user.username, но углубляясь, как user.signInUserSession.accessToken, я получаю неопределенное каждый раз.

Я даже могу получить доступ к jwtToken в инструментах реагирования с помощью $r.hooks[0].value.signInUserSession.accessToken.jwtToken.

AuthContext. js

import React, {createContext, useEffect, useState} from 'react';
import {Auth} from "aws-amplify";

export const AuthContext = createContext(false);

const AuthContextProvider = (props) => {
    const [user, setUser] = useState([false]);

    useEffect(() => {
        Auth.currentAuthenticatedUser()
            .then(user => setUser(user))
            .catch(err => console.log(err));
    }, []);

    return (
        <AuthContext.Provider value={user}>
            {props.children}
        </AuthContext.Provider>
    );

};
export default AuthContextProvider;

Body. js

import React, { useState, useEffect, useContext } from 'react';
import {Content} from "./styles"
import {AuthContext} from "../../../contexts/AuthContext";


function Body() {
    const user = useContext(AuthContext);

    const [investor, setInvestor] = useState([]);

    const jwtToken = user.signInUserSession.accessToken.jwtToken;

    useEffect(() => console.log("Bearer ".concat(jwtToken)), [user]);

    useEffect(() => {
        fetch("https://DOMAIN/investors/overview/v3/?token=".concat(jwtToken), {
            method: 'GET',
            headers: {
                'Authorization': "Bearer ".concat(jwtToken)
            }
        })
            .then(response => response.json())
            .then((responseData) => {
                setInvestor(responseData);
            })
            .catch(error => setInvestor({ error }));
    }, [user]);

    return (
        <Content>{investor.total_value}</Content>
    )
}

export default Body

Любая помощь по тому, что мне не хватает, очень ценится!

EDIT - фактический объект скопирован из devTools (не знаете, как проверить фактический пользовательский объект напрямую, кроме этого?):

[
  {
    "name": "Context",
    "value": {
      "username": "XXX",
      "pool": "{advancedSecurityDataCollectionFlag: true, client: …}",
      "Session": null,
      "client": "{endpoint: \"https://cognito-idp.ap-southeast-2.amaz…}",
      "signInUserSession": {
        "idToken": {
          "jwtToken": "MDRjYmUiLCJhdWQiOiI0dmRwbmo2b2JhaGpyc25hbmtkNvdXRoZUiOiJwb3dlcndy...",
          "payload": "{aud: \"4vdpnj6obahjrsnankda91s2va\", auth_time: 1583…}",
          "constructor": "ƒ CognitoIdToken() {}",
          "getJwtToken": "ƒ getJwtToken() {}",
          "getExpiration": "ƒ getExpiration() {}",
          "getIssuedAt": "ƒ getIssuedAt() {}",
          "decodePayload": "ƒ decodePayload() {}"
        },
        "refreshToken": {
          "token": "iJKXkXkGbJbBgnRPMN84TWBdsES-mZBGN3yxGd-6555-a67nsFuB9UZKG-s-mk3EHRqs-WfeDxpOw9ia5OtI-ZZTNh2pK...",
          "getToken": "ƒ getToken() {}"
        },
        "accessToken": {
          "jwtToken": "GET_THIS_TOKEN.zb3V0aGVhc3QtMi5hbWpIjoi...",
          "payload": "{auth_time: 1583469821, client_id: n…}",
          "constructor": "ƒ CognitoAccessToken() {}",
          "getJwtToken": "ƒ getJwtToken() {}",
          "getExpiration": "ƒ getExpiration() {}",
 .........
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...