3 Star 9 Fork 1

不凡学院/react-base-demos

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
12-条件渲染.html 3.16 KB
一键复制 编辑 原始数据 按行查看 历史
不凡君 提交于 2021-06-18 14:36 . 提交
<!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>
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/bufanxy/react-base-demos.git
git@gitee.com:bufanxy/react-base-demos.git
bufanxy
react-base-demos
react-base-demos
master

搜索帮助