ReactJS:点击按钮来改变页面上的组件
ReactJS: Click on a button to change component on page
假设我正在页面上呈现一个注册组件。我有一个按钮说提交和登录。当我点击登录按钮,我希望它取代注册组件,而不必去另一个页面。只是想知道,概念上如何实现onclick处理程序。我需要使用react路由器吗?
您可以使用三元语句有条件地呈现组件。
首先声明某种状态变量来处理组件切换:
constructor(props) {
super(props);
this.state = {
login: false
}
}
然后在按钮的点击处理程序中处理这个变量的切换:
onClick = event => {
this.setState({login: !this.state.login})//sets it to opposite of previous value
}
然后在你的渲染中你将实现三元语句
render() {
return(
this.state.login ? //if login is true
<SomeComponent
onClick={this.onClick.bind(this)}
/>
: //else
<AnotherComponent
onClick={this.onClick.bind(this)}
/>
)
}
在这两个组件中你都必须有一个按钮:
<button onClick={this.props.onClick}>Switch Component</button>
我会使用react-router-dom Link:
import { Link } from 'react-router-dom';
和按钮看起来像这样:
<button component={Link} to="/yourpage">
使用Router Library是在组件之间导航的正确方式。由于您不想使用路由,您可以尝试这样做:
维护一个状态变量来检查用户是否登录,在父组件中,你想用另一个屏幕(如
)替换注册屏幕。constructor(props) { /* Parent Component Constructor */
super(props);
this.state = {
isLoggedIn : false
}
}
和父组件方法中的onLoginClick
将为:
onLoginClick = () => {
this.setState({ isLoggedIn : true })
}
这个值将被设置为true,当你点击登录组件(子组件)中的登录按钮时,onLoginClick方法将作为props从父组件传递,即
<Button onClick={this.props.onLoginClick}>Login</Button>
现在在父组件的渲染函数中使用这个isLoggedIn
状态变量,如下所示:
render() {
return(
{!this.state.isLoggedIn &&
<LoginComponent
onClick={this.onLoginClick.bind(this)}
/>
}
{this.state.isLoggedIn &&
<SecondComponent/>
}
)
}
相关文章:
- ReactJS:如何在改变状态后立即更新组件
- 改变<选择>有状态React组件中的值
- 改变悬停组件的背景颜色
- React组件在状态改变后不重新呈现
- 当父组件状态改变时,如何强制子组件重新呈现
- 如何改变react组件的样式和类
- js:创建一个多选择组件.选项组件状态的组合流不输出改变的状态
- 当改变url参数时,React路由器不会重新加载组件
- 改变组件的位置
- VueJs 2.0循环组件和改变道具
- 带有改变视图的Reactjs组件
- 为什么在参数中被处理的组件会改变
- React JS -当localStorage状态改变时,获得一个单独的组件来重新渲染
- 在React.js中,点击一个组件中的按钮不会改变其他组件中的值
- 当状态改变时,组件无法重新呈现
- React状态的改变不会导致组件重新渲染
- 复选框像单选按钮一样工作,但不会改变UI组件
- React-Redux connect()不更新组件,即使状态被改变而没有突变
- Vue.js:子组件如何改变父组件的状态
- 如何引用被淘汰组件改变的元素