Javascript 无法读取未定义的privateroute的属性状态
我在网上找到了如何制作一条伪装的私人路线, 然而,我得到了一个错误 第12行“无法读取未定义的属性‘状态’” 我是个新手,我很难理解道具和这个 路由器.jsJavascript 无法读取未定义的privateroute的属性状态,javascript,reactjs,Javascript,Reactjs,我在网上找到了如何制作一条伪装的私人路线, 然而,我得到了一个错误 第12行“无法读取未定义的属性‘状态’” 我是个新手,我很难理解道具和这个 路由器.js import React, { Component } from 'react'; import { Route, BrowserRouter, Redirect } from "react-router-dom"; import Login from './Authentication/Login'; import Register
import React, { Component } from 'react';
import { Route, BrowserRouter, Redirect } from "react-router-dom";
import Login from './Authentication/Login';
import Register from './Authentication/Register';
import PageRouter from './page/PageRouter';
import Profile from './page/Profile';
import Rankings from './page/Rankings';
import Shop from './page/Shop';
const PrivateRoute = ({ component: Component, ...rest }) => (
<Route {...rest} render={
(props) => (
this.state
? <Component {...props} />
: <Redirect to='/login' />
)} />
)
class Router extends Component{
constructor(props){
super(props);
this.state = {
login: false,
}
}
render(){
return(
<div>
<BrowserRouter>
<Route exact path="/" component={ Register }></Route>
<Route path='/register' component={ Register }/>
<Route path="/login" component={ Login } />
<PrivateRoute path='/home' component={ PageRouter } />
<Route path ='/profile' component={ Profile } />
<Route path = '/rankings' component={ Rankings } />
<Route path = '/shop' component={ Shop }/>
</BrowserRouter>
</div>
);
}
}
export default Router;
import React,{Component}来自'React';
从“react router dom”导入{Route,BrowserRouter,Redirect};
从“./Authentication/Login”导入登录名;
从“./Authentication/Register”导入寄存器;
从“./page/PageRouter”导入PageRouter;
从“./page/Profile”导入配置文件;
从“./页面/排名”导入排名;
从“./page/Shop”导入店铺;
const privaterout=({component:component,…rest})=>(
(
这个州
?
:
)} />
)
类路由器扩展组件{
建造师(道具){
超级(道具);
此.state={
登录:false,
}
}
render(){
返回(
);
}
}
导出默认路由器;
任何信息都会有帮助。谢谢 这不是问题。这里缺少的关键是理解JavaScript上下文。现在,
PrivateRoute
的词法范围是全局
或窗口
对象(或者如果处于严格模式未定义
)。您当前在该对象上没有状态
。如果您想要一种利用路由器
类”状态的方法,那么我建议您通过路由器
向PrivateRoute
传递一些道具
因此,如果您想访问state上的login
属性,请尝试以下操作:
然后你的PrivateRoute
将有权访问一个名为isLoggedIn
的prop
,你可以在你的三元数据库中使用它。第12行的“无法读取未定义的属性‘状态’”,我是一个新手,很难理解props与此相对应
,其中名称
和地址
可以分别通过this.Props.name
或this.Props.address
访问这是一个完全不同的概念<代码>这是指组件本身。这意味着,您可以访问组件类中定义的(组件)状态、道具或方法
privaterout
的实现:
const PrivateRoute = ({ component: Component, ...rest }: {component: any}) => (
<Route {...rest} render={(props) => (
fakeAuth.isAuthenticated === true
? <Component {...props} />
: <Redirect to={{
pathname: '/login',
state: { from: props.location }
}} />
)} />
)
PrivateRoute.propTypes = {
component: PropTypes.any,
location: PropTypes.string,
path: PropTypes.string
};
const PrivateRoute=({component:component,…rest}:{component:any})=>(
(
fakeAuth.isAuthenticated==true
?
:
)} />
)
PrivateRoute.propTypes={
组件:PropTypes.any,
位置:PropTypes.string,
路径:PropTypes.string
};
state
属性不是this.state
。它是react router dom
的Redirect
中的一个参数,这是否回答了您的问题?关于react、组件状态、fat arrow函数和未定义的这方面,有很多很多堆栈溢出问题。您研究并尝试使用其中的哪一个来解决您的问题,以及为什么它们不适用于您?使用此。setState()您需要使用基于lcass的组件:类PrivateRoute扩展了React.component
我认为您将这个.state
的概念与state
属性混合在一起,这些属性是'React-router-dom'的重定向
组件的一个参数。这是否回答了您的问题?唯一的问题是它不会再次运行render(),即使我的状态为change,因此会一直停留在state:false