问题描述
我是 React Context API 的新手,并且已经为我正在开发的应用程序设置了它,其中用户通过 AWS 登录。在我的 App.js 中,当用户登录时,我使用 useState 钩子将 companyName 状态设置为来自其解码令牌的用户公司名称。
在我的上下文文件“GlobalState.js”中,我想将“initialState”设置为此 companyName 变量,以便可以轻松传递到任何组件,因为我将在许多级别上需要它。目前,我只是将 Context 中公司名称的“initialState”设置为空字符串,我想知道如何将此 initialState 设置为我在 App.js 文件中声明的 companyName 状态。
我的 App.js 在这里:
import { useState,useEffect } from 'react';
import { browserRouter as Router,Route } from 'react-router-dom';
import { Container } from 'react-bootstrap';
import DashboardScreen from './screens/DashboardScreen';
import FileUploadScreen from './screens/FileUploadScreen';
import Sidebar from './components/Sidebar/Sidebar';
import CompanyProfileScreen from './screens/CompanyProfileScreen';
import InsightsScreen from './screens/InsightsScreen';
import WelcomeScreen from './screens/WelcomeScreen';
import Header from './components/Header';
import Amplify,{ Auth } from 'aws-amplify';
import awsconfig from './aws-exports';
import { GlobalProvider } from './context/GlobalState';
Amplify.configure(awsconfig);
const App = () => {
const [companyName,setCompanyName] = useState('');
const [userSession,setUserSession] = useState('');
const [userName,setUserName] = useState('');
const [isLoading,setIsLoading] = useState(true);
const onPageRendered = async () => {
let user = await Auth.currentAuthenticatedUser();
let userToken = user.getSignInUserSession().getIdToken().getJwtToken();
setUserSession(user.getSignInUserSession());
let base64Url = userToken.split('.')[1];
let var1 = base64Url.replace(/-/g,'+').replace(/_/g,'/');
let var2 = decodeURIComponent(
atob(var1)
.split('')
.map(function (c) {
return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
})
.join('')
);
let company = var2.substring(
var2.indexOf('company') + 10,var2.indexOf('aud') - 3
);
setCompanyName(company);
let userAccountName = var2.substring(
var2.indexOf('"name":') + 8,var2.indexOf('exp') - 3
);
setUserName(userAccountName);
};
useEffect(() => {
onPageRendered();
},[companyName,userName]);
return (
<GlobalProvider>
<Router>
<Header companyName={companyName} userName={userName} />
<Sidebar />
<main className=''>
<Container>
<Route path='/company' component={CompanyProfileScreen} />
<Route path='/insights' component={InsightsScreen} />
<Route path='/fileupload' component={FileUploadScreen} />
<Route path='/landscape' component={DashboardScreen} />
<Route path='/' component={WelcomeScreen} exact />
</Container>
</main>
</Router>
</GlobalProvider>
);
};
export default App;
这是我的 Context 文件夹中的 GlobalState.js 文件:
import { createContext,useReducer } from 'react';
import AppReducer from './AppReducer';
const initialState = {
companyName: '',};
export const GlobalContext = createContext(initialState);
export const GlobalProvider = ({ children }) => {
const [state,dispatch] = useReducer(AppReducer,initialState);
return (
<GlobalContext.Provider
value={{
companyName: state.companyName,}}>
{children}
</GlobalContext.Provider>
);
};
非常感谢您就此提出任何建议/指导,也许答案很简单,但这是漫长的一天!提前致谢。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)