gpt4 book ai didi

javascript - 全局变量存储在本地后如何访问它?

转载 作者:行者123 更新时间:2023-12-02 21:35:46 24 4
gpt4 key购买 nike

我在函数外部使用局部变量时遇到问题。我正在调用 myapi.com/access_token 以获取访问 token ,然后我需要在对 jsonserverprovider 的请求 header 中使用该访问 token 。我尝试使用 window.bl_token 声明它,但当我尝试 console.log 响应时,我仍然得到未定义的结果。

import React from 'react';
import { fetchUtils, Admin, Resource } from 'react-admin';
import jsonServerProvider from 'ra-data-json-server';

var bl_token;

const data = { email: 'xxx@xxx.com', password: 'xxx' };

fetch('https://myapi.com/access_token', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(data),
})
.then((response) => response.json())
.then((bl_data) => {
window.bl_token=bl_data.access_token;
})

const httpClient = (url, options = {}) => {
if (!options.headers) {
options.headers = new Headers({ Accept: 'application/json' });
options.headers = new Headers({Authorization: bl_token});

}
return fetchUtils.fetchJson(url, options);
};

const dataProvider = jsonServerProvider('https://myapi.com/', httpClient);
const App = () => (
<Admin dataProvider={dataProvider}>
<Resource name="links"/>
</Admin>
);
export default App;

最佳答案

这里可能发生的情况是,当页面加载时,bl_token的初始值未定义,设置获取 token 的函数将被执行,但一旦完成并获得 token ,状态就不会更新,从而导致当您尝试获取 bl_token 时,它显示为未定义。

要修复它,您需要对状态更改进行 react 监视,我能想到的最简单的方法是 react Hook useEffect。

import React, { useEffect, useState } from 'react';
import { fetchUtils, Admin, Resource } from 'react-admin';
import jsonServerProvider from 'ra-data-json-server';


export const App = () => (

const [blToken, setBlToken] = useState(null); // chuck the token in react state
const data = { email: 'xxx@xxx.com', password: 'xxx' };

// add the react hook useEffect, this will fire on page load
useEffect({
fetchData();
},[])


// move the fetch into a function
const fetchData = () => {
fetch('https://myapi.com/access_token', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(data),
})
.then((response) => response.json())
.then((bl_data) => {
//window.bl_token=bl_data.access_token;
// update the react state here
setBlToken(bl_data.access_token)
})
}

const httpClient = (url, options = {}) => {
if (!options.headers) {
options.headers = new Headers({ Accept: 'application/json' });
// use the state variable here
options.headers = new Headers({Authorization: blToken});

}
return fetchUtils.fetchJson(url, options);
};



// add a check to render only if the blToken is present

if(blToken) {
const dataProvider = jsonServerProvider('https://myapi.com/', httpClient);
return(
<Admin dataProvider={dataProvider}>
<Resource name="links"/>
</Admin>
)
} else {
return null
}

);

通过使用 React 的状态来跟踪变量,当数据可供您访问时,它可以重新渲染。

关于javascript - 全局变量存储在本地后如何访问它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60495876/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com