[编辑]
问题不在于isAuth属性,而在于ProtectedRoad中重定向组件中的props.location!尽管如此,如果你有一个问题来理解use Selector或mapStateToProps,去@Versifici的答案!
[结束编辑]
我有一个React/Redux应用程序,在authReducer中具有isAuth属性。我想将其传递给我的ProtectedRoute组件以检查行为。
我有这个错误,我确信它与传递isAuth到ProtectedComponent有关:
未捕获错误:超过最大更新深度
我的AppContainer
import React, {useEffect, useState} from "react";
import {Router, Route} from 'react-router-dom';
import history from "./constants/history";
import * as ROUTES from './constants/routes';
import ProtectedRoute from "@components/HOC/ProtectedRoute";
import LandingPage from "../domains/Main/LandingPage";
import AdminLandingPage from '@domains/Admin/AdminLandingPage';
import SessionLandingPage from '@domains/Session/SessionLandingPage';
import SignInPage from "../domains/Auth/SignInPage/SignInPage";
import SignUpPage from "../domains/Auth/SignUpPage/SignUpPage";
import PasswordForgetPage from "../domains/Auth/PasswordForgetPage/PasswordForgetPage";
import { useSelector } from 'react-redux'
function AppContainer() {
const [checkAuth, setCheckAuth] = useState(false);
const { isAuth } = useSelector(state => state.authReducer);
return (
<Router history={history}>
<ProtectedRoute exact path={ROUTES.MAIN_LANDING} component={LandingPage}/>
<Route exact path={ROUTES.SIGN_IN} component={SignInPage}/>
<ProtectedRoute exact path={ROUTES.ADMIN_LANDING} component={AdminLandingPage}/>
<ProtectedRoute exact path={ROUTES.SESSION_LANDING} component={SessionLandingPage}/>
</Router>
);
}
export default AppContainer;
Console.log按预期显示值“False”。
只是通过使用选择器,我有无限循环错误。
AuthReducer的状态:
const INITIAL_STATE = {
loading: false,
error: '',
isAuth : false
};
我的保护路由组件
const ProtectedRoute = (
{
component: Component,
isAuth,
...rest
}
) => {
if(isAuth === null) {
return 'loading...'
}
return (
<Route
{...rest}
render={(props) => {
return isAuth
?
(<Component {...rest} {...props} />) :
(<Redirect to={{pathname: '/', state: {from: props.location}}}/>)
}}
/>
)
};
export default ProtectedRoute;
我建议您使用mapStateToProps将数据从存储区发送到组件的道具,您必须首先从react redux包导入connect方法,
然后在MapStateTops函数中,将props中的数据名称(isAuth)作为属性,将全局存储中的位置(state.authReducer.isAuth)作为值
import { connect } from "react-redux";
function AppContainer(props) {
const { isAuth } = props;
return (
<Router history={history}>
<ProtectedRoute exact isAuth={isAuth} path={ROUTES.MAIN_LANDING} component={LandingPage}/>
<Route exact path={ROUTES.SIGN_IN} component={SignInPage}/>
<ProtectedRoute exact isAuth={true} path={ROUTES.ADMIN_LANDING} component={AdminLandingPage}/>
<ProtectedRoute exact isAuth={true} path={ROUTES.SESSION_LANDING} component={SessionLandingPage}/>
</Router>
);
}
const mapStateToProps = (state) => ({
isAuth: state.authReducer.isAuth
});
export default connect(mapStateToProps, null)(AppContainer);
问题内容: 我有一个具有与组件本身相同类型的子组件的组件。我也可以渲染孩子,但是孩子似乎无法访问他们的状态。我在Redux中使用React 另外,我正在使用Material-ui中的ListItem(它们最终呈现在List组件中),并且我的代码受到官方redux回购中的树视图示例的严重影响。我的状态如下所示: 所示状态与树状示例中的状态相同 问题答案: 好吧,如果我理解正确,那么您希望这些组件从r
我试图找出如何通知另一个组件状态更改。假设我有3个组件——pp.jsx、Header.jsx和SidebarPush.jsx我只是想用onclicka切换一个类。 因此,标题。jsx文件将有2个按钮,点击时将切换状态为真或假。另外两个组件是应用程序。jsx和Header。jsx需要了解这些状态的变化,以便在这些状态发生变化时可以切换类。
你好,亲爱的堆栈溢出,我刚刚启动了一个盖茨比网站,但我有通过传递给组件的数组循环的问题。 我有一个叫博客的盖茨比网页。js,在这个页面中,我展示了通过GraphQL检索到的博客标题。直接在博客中使用循环。我可以看到所有的标题。 我的blog.js圈是这样的 它从以下GraphQL查询中检索数据 而不是在博客中创建博客帖子预览。相反,我想使用一个组件来实现这一点。我创建了一个名为BlogPostRe
我试图将类名传递给react组件以更改其样式,但似乎无法正常工作: 我试图通过传递具有各自风格的类的名称来改变药丸的风格。我是新来的,所以也许我做得不对。谢啦
我想在我的组件中触发一个动作。这是一个表示组件,不需要重新创建。路由器实现是使用反应路由器冗余完成的。 main.js 应用:日新社: header.js: employee.js: action-creator.js: 道具将不包含动作,因为我没有将它绑定到道具上。我尝试在App.js中编写mapStateToProps和mapDispatchToProps,如下所示: 导出默认连接(mapSt
问题内容: 我尝试将函数传递给子组件。当用户单击每个子组件时,将调用onclick函数。此onclick函数将写入父组件。 父组件: 子组件: 在这一行: 它说没有定义handleClick …如何解决这个问题? 感谢您的回答。 问题答案: 您需要将Agents绑定到AgentsList:这是您的代码的一个简单示例,我不得不删除一些东西,但是您明白了: http://jsfiddle.net/vh