代码拉取完成,页面将自动刷新
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<!-- 注意: 先引入 react基础库,再引入react dom解析库 -->
<script src="lib/react/react.development.js"></script>
<script src="lib/react/react-dom.development.js"></script>
<script src="lib/babel.min.js"></script>
</head>
<body>
<!-- 创建react解析的容器 -->
<div id="root"></div>
<script type="text/babel">
// 1. 创建 两个组件
class UserGreeting extends React.Component {
render(){
return (
<h1 style={{color: 'blue'}}>欢迎您:张三!</h1>
)
}
}
class GuestGreeting extends React.Component {
render(){
return (
<h1 style={{color: 'red'}}>请登陆!</h1>
)
}
}
// 声明两个按钮组件
class LoginButton extends React.Component {
constructor(props){
super(props);
}
// 在子组件,无法直接修改父组件
// 在react中需要子类修改父类state就需要通过传入回调函数(控制反转)的形式处理
// state数据是从源头过来的,必须通过调用源头的事件来修改数据
render(){
return (
<button onClick={this.props.onClick}>登陆</button>
)
}
}
class LoginoutButton extends React.Component {
constructor(props){
super(props);
}
render(){
return (
<button onClick={this.props.onClick}>退出</button>
)
}
}
class Greeting extends React.Component {
constructor(props){
super(props);
}
render(){
// 根据props.isLogin判断渲染哪个组件
if(this.props.isLogin){
return <UserGreeting/>
}
return <GuestGreeting/>
}
}
// 定义LoginControl组件
class LoginControl extends React.Component {
constructor(props){
super(props);
// isLogin 需要是动态的
this.state = {
isLogin: false
}
// 这里需要对行内绑定的事件进行bind绑定
this.doLogin = this.doLogin.bind(this);
this.doLogout = this.doLogout.bind(this);
}
doLogout(){
//退出
this.setState({
isLogin: false
})
}
doLogin(){
this.setState({
isLogin: true
})
}
render(){
// button需要被渲染 但是到底渲染哪一个组件需要根据isLogin状态来判断
var button;
// 登陆状态,应该显示退出按钮
if(this.state.isLogin){
// 变量来储存元素
button = <LoginoutButton onClick={this.doLogout}/>;
}else{
button = <LoginButton onClick={this.doLogin}/>;
}
return (
<div>
<Greeting isLogin={this.state.isLogin}/>
{button}
</div>
)
}
}
// 使用react 相关api 渲染到容器
ReactDOM.render(<LoginControl/>,document.getElementById('root'));
</script>
</body>
</html>
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。