【发布时间】:2020-11-20 04:38:36
【问题描述】:
让我解释一下我的问题。我有一个使用 Redux 对 RBAC 模型做出反应的应用程序。为此,我需要在加载我的应用程序时在 useEffect 中调用我的 dispatch() 以检查用户是否经过身份验证。如果是,我需要发送它包含在 jwt 令牌中的信息。
所以我做了这样的事情(在 App.jsx 中):
const App = () => {
const [isAuthenticated, setIsAuthenticated] = useState(false);
const dispatch = useDispatch()
const authentication = () =>
isAuthenticated ? (
<Redirect to="/app" />
) : (
<PublicRoutes />
);
useEffect(() => {
setIsAuthenticated(Auth.isAuth())
if(isAuthenticated){
store.dispatch(setConnectedUser({name:"Jude"}))
}
}, [isAuthenticated])
const store = createStore(rootReducer, composeWithDevTools(
applyMiddleware(thunk),
));
return (
<Provider store={store}>
<HashRouter>
<Switch>
<Route path="/app" component={PrivateRoutes} />
<Route path="" render={authentication} />
</Switch>
</HashRouter>
</Provider>
);
}
export default App;
ReactDOM.render(<App />, document.getElementById("root"))
Auth.isAuth() 只是获取令牌,检查令牌是否仍然有效,如果是则返回 true。
但事情是这样的,这样做我犯了一个错误: 未捕获的错误:找不到 react-redux 上下文值;请确保组件被包裹在一个
我知道错误来自我想在提供者之外 dispatch() 的事实,但是可以这样做吗?还是我会做错?这是我第一个使用 Redux 的项目,可能我没有完全理解它是如何工作的?
知道 dispatch() 工作得很好,它之前在登录时被调用,但是我的标题上有一个错误,它将从 reducer 中检索信息,它试图在存储信息出现之前显示它,这就是为什么我想在应用程序加载时进行控制,而不仅仅是在登录时。
【问题讨论】:
标签: javascript reactjs redux