reactjs - TypeError: this.props.logout 不是函数
问题描述
从 Login 类以 render 方法发送道具,但 Admin 类无法读取传递的道具。Admin 类既不读取注销方法,也不读取状态变量 isAuthenticated。
class Login extends React.Component {
constructor...
handleLogin...//Function
logout...//Function
render(){
if(!this.state.isAuthenticated){
return (
<div className="login-wrapper">
<Route path="/admin" render={(e)=><Admin isAuthenticated={this.state.isAuthenticated} logout={this.logout.bind(this)}></Admin>}></Route>
<div className="login">
<input type="text" name="id" placeholder="Enter ID" value={this.state.id} onChange={(e)=>this.setState({id:e.target.value})}/>
<br/>
<input type="password" name="password" placeholder="Enter Password" value={this.state.password} onChange={(e)=>this.setState({password:e.target.value})}/>
<br/>
<button type="submit" onClick={(e)=>{this.handleLogin(e)}}>Login</button>
</div>
</div>
)
}
else{
return(
<div>
<Route path="/admin" render={(e)=><Admin isAuthenticated={this.state.isAuthenticated} logout={this.logout.bind(this)}></Admin>}></Route>
<Redirect to="/admin"></Redirect>
</div>
)}
}
}
管理类显示 this.props.logout() 不是函数。
class Admin extends React.Component{
constructor(props){
super(props);
this.state={};
}
render(){
return(
<React.Fragment>
<div id="menu">
<button onClick={(e)=>{this.props.logout()}}>Logout</button>
</div>
</React.Fragment>
)
}
}
解决方案
好的,所以我认为您的方法略有错误
你不应该渲染这个:
<Route
path="/admin"
render={e => (
<Admin
isAuthenticated={this.state.isAuthenticated}
logout={this.logout}
/>
)}
/>
<Redirect to="/admin" />
在注销组件中
您需要做的就是移动此代码:
logout = e => {
console.log("Logging out...");
localStorage.removeItem("admin");
this.setState({
isAuthenticated: false
});
};
到App.js
文件,然后传递logout
到这条路线:<Route path="/admin" component={Admin} />
像这样:<Route path="/admin" component={Admin} logout={this.logout}/>
您还需要放入isAuthenticated
该组件的状态
你应该让你所有Route
的人都住在同一个地方,如果你需要在不同的组件中去不同的路线,然后使用<Link />
让我知道这是否有帮助
推荐阅读
- java - Java 移位运算符对预保存值的工作方式与对直接值的工作方式不同
- python - 有没有一种简单的方法可以在尺寸大于 2 的 python 中使用 DBSCAN?
- regex - 红移上的正则表达式匹配
- asp.net-mvc - 使用模型 C# 中定义的对象和列表将对象添加到列表
- javascript - *ngFor 即使数据更新也不显示数据
- kubernetes - 存储类是 Kubernetes 中的集群级对象吗?
- c# - C# 为 HWND_BROADCAST 找到已经运行的应用程序实例窗口句柄
- java - 使用 Jackson 从 URL 解析 JSON 数据时返回空值
- r - 使用 data.table 中的集合更改多列
- javascript - 如何以编程方式启用“-ms-high-contrast”媒体查询?