我想通过Reaction获取用户令牌.我在我的登录提交表单中使用以下代码,它是可以的: 在Login.jsx中:
const Login = () => {
const { setUserToken } = useContext(AppContext);
const submitForm = async (values) => {
postUserLogin(values)
.then((response) => {
const { token } = response.data;
setUserToken(token);
setApiError({ status: '', error: '' });
navigate('/employer/jobs');
})
.catch((err) => {
setUserToken('');
});
return (<>...</>);
export default Login;
在EmployerJob.jsx中:
const EmployerJob = () => {
const { employerJobs, setEmployerJobs, userToken} = useContext(AppContext);
useEffect(() => {
const fetchData = async () => {
const res = await getEmployerJobList(userToken);
if (res.status === 200) {
const { paginator, items: jobs } = res.data;
setPaginatorInfo(paginator);
setEmployerJobs(jobs);
}
}
fetchData();
}, []);
return (
<div className="text-light my-4">
{
<span>Length: {paginatorInfo.count}</span>
}
{
employerJobs.length > 0 ? employerJobs.map((job, index) => (
<p key={index}>{job.salary}</p>
)) : <p>No Job!</p>
}
</div>
);
};
export default EmployerJob;
在appConext.jsx中:
import {createContext} from 'react';
export const AppContext = createContext({
userToken:'',
setUserToken:()=>{},
employerJobs:[],
setEmployerJobs:()=>{},
});
在App.js中:
const App= ()=> {
const [userToken, setUserToken] = useImmer('');
const [employerJobs, setEmployerJobs] = useImmer([]);
return(
<AppContext.Provider value={{
userToken,
setUserToken,
employerJobs,
setEmployerJobs,
}}>
<div className='App'>
<Navbar/>
<Routes>
<Route path='/employer/login' element={<Login/>} />
<Route path='/employer/jobs' element={<EmployerJob/>}/>
<Route path="*" element={<NotFound/>}/>
</Routes>
</div>
</AppContext.Provider>
);
}
export default App;
它只适用于第一次登录,但当我刷新‘/Employer/Jobs’页面时,userToken值为空.我是新手,我认为不应该更改用户令牌.为什么会这样?我该如何解决这个问题?