当前位置: 首页 > news >正文

【React】语法

React的基础语法(元素渲染 / 更新状态)

<!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>Hello React!</title>
    <!-- Babel 可以将 ES6 代码转为 ES5 代码 -->
    <script src="https://cdn.staticfile.org/react/16.4.0/umd/react.development.js"></script>
    <!-- 提供与 DOM 相关的功能 -->
    <script src="https://cdn.staticfile.org/react-dom/16.4.0/umd/react-dom.development.js"></script>
    <!-- React 的核心库 -->
    <script src="https://cdn.staticfile.org/babel-standalone/6.26.0/babel.min.js"></script>
</head>
<body>
    <!-- 更DOM节点 -->
    <div id="example"></div>
    
    <script type="text/babel">
    // -----------元素渲染-------------
    // 1.直接声明使用
    // ReactDOM.render(
    //     <h1>Hello, world!</h1>,
    //     document.getElementById('example')
    // );

    // 2.用变量的形式创建
    // const element = <h1>用变量的形式创建</h1>;
    // ReactDOM.render(
    //     element,
    //     document.getElementById('example')
    // )

    // 3.用函数的形式创建
    // function Demo(props){
    //     return(
    //         <div>
    //             <h3>用函数的形式创建</h3>
    //             <h3>传值:{props.name}</h3>
    //         </div>
    //     )
    // }
    // ReactDOM.render(
    //     <Demo name="Lucy" />,
    //     document.getElementById('example')
    // )

    // 4.用类的形式创建( 使用 ES6 类写法,用 this.props.属性名 来取值。)
    var i = 12;
    var mytyle = {
        color:'red',
        fontWeight:'bold'
    }
    // class Nav extends React.Component{
    //     render(){
    //         return(
    //           <div>
    //             <h3>用类的形式创建</h3>

    //             {/* JSX 传值 */}
    //             <h3>姓名:{this.props.name}</h3>
    //             <h3>年龄:{this.props.age}</h3>

    //             {/* JSX中不能使用if else 语法, 只能使用三元运算符 */}
    //             <h3>{i == 1 ? 'True' : 'False'}</h3>

    //             {/* JSX 推荐使用内联样式 */}
    //             <h4 style={mytyle}>JSX 推荐使用内联样式</h4>
    //         </div>
                
    //         )
    //     }
    // }
    // ReactDOM.render(
    //     <Nav name="Eva" age="18"/>,
    //     document.getElementById('example')
    // )

    {/* JSX 中插入数组 */}
    // let arr = [
    //     <div>数组1</div>,
    //     <div>数组2</div>
    // ]
    // ReactDOM.render(
    //     <h4>{arr}</h4>,
    //     document.getElementById('example')
    // )

    {/* React State(状态) */}
    // class App extends React.Component {
    //     constructor(props){
    //         super(props);
    //         this.state = {
    //             date : new Date()
    //         }
    //         // console.log('this.state.date: ', this.state.date);
    //     }
    //     // 生命周期的钩子函数(componentDidMount,componentWillUnmount)
    //     // 挂载
    //     componentDidMount(){
    //         this.timer = setInterval(() => this.navTick(), 1000)
    //     }
    //     // 销毁
    //     componentWillUnmount(){
    //         clearInterval(this.timer);
    //     }
    //     // 点击时间
    //     navTick(){
    //         // 在setState中重置数据
    //         this.setState({
    //             date : new Date()
    //         },() => {
    //             // 必须再回调函数里面打印,外层打印无效果
    //             // console.log('this.state.date: ', this.state.date);
    //         })
    //     }
    //     render(){
    //         return(
    //             <div>
    //                 <h1>这是一段文字</h1>
    //                 <h1>{this.state.date.toLocaleTimeString()}</h1>
    //             </div>
    //         )
    //     }
    // }

    // ReactDOM.render(
    //     <App/>,
    //     document.getElementById('example')
    // )

       {/* 事件处理 */}
    // function Nav(){
    //     function navTick(e) {   //e 是一个合成事件
    //         e.preventDefault();
    //         console.log('被触发');
    //     }
    //     return(
    //         <h3 onClick={navTick}>事件处理</h3>
    //     )
    // }
    // ReactDOM.render(
    //     <Nav/>,
    //     document.getElementById('example')
    // )

    {/* 切换开关状态的按钮: */}
    // class Toggle extends React.Component{
    //     constructor(props){
    //         super(props);
    //         this.state = {
    //             toggles:true
    //         }
            
    //         // 这边绑定是必要的,这样 `this` 才能在回调函数中使用
    //         this.navToggle = this.navToggle.bind(this);
    //     }
    //     navToggle(){
    //         this.setState(prevState => ({
    //             toggles: !prevState.toggles
    //         }), ()=>{
    //             console.log(this.state.toggles);
    //         })
    //     }
    //     render(){
    //         return(
    //             <button onClick={this.navToggle}>{this.state.toggles ? 'open' : 'close'}</button>
    //         )
    //     }
    // }
    // ReactDOM.render(
    //     <Toggle/>,
    //     document.getElementById('example')
    // )

    {/* 向事件处理程序传递参数 */}
    // class LoggingButton extends React.Component {
    //     constructor(props){
    //         super(props);
    //         this.state = {
    //             toggles:true,
    //             name:'Hello world!'
    //         }
    //     }
    //     // 这个语法确保了 `this` 绑定在  handleClick 中
    //     // 这里只是一个测试
    //     handleClick = () => {
    //         console.log('this is:', this);  //this指向this.state
    //     }
    //     preventPop(name, e){    //事件对象e要放在最后
    //         e.preventDefault();
    //         alert(name);
    //     }
    //     render() {
    //         return (
    //             <div>
    //                 <button onClick={this.handleClick}>
    //                     Click me
    //                 </button>
    //                 <button onClick={(e) => this.handleClick(e)}>
    //                     Click me
    //                 </button>

    //                 {/*向事件处理程序传递参数(两种方式是等价的。)*/}
    //                 {/* 1.参数 e 作为 React 事件对象将会被作为第二个参数进行传递 */}
    //                 <button onClick={(e) => this.deleteRow(id, e)}>Delete Row</button>

    //                 {/* 2.通过 bind 方式向监听函数传参,在类组件中定义的监听函数,事件对象 e 要排在所传递参数的后面 */}
    //                 <button onClick={this.deleteRow.bind(this, id)}>Delete Row</button>  

    //                 {/* 通过 bind() 方法传递参数。 */}
    //                 <a href="https://reactjs.org" onClick={this.preventPop.bind(this,this.state.name)}>Click</a>
    //             </div>
    //         );
    //     }
    // }
    // ReactDOM.render(
    //     <LoggingButton/>,
    //     document.getElementById('example')
    // )
    </script>

   <!-- 
        1.推荐在 React 中使用 JSX 来描述用户界面。
        例如:const element = <h1>用变量的形式创建</h1>; 既不是字符串也不是 HTML。它被称为 JSX, 一种 JavaScript 的语法扩展。
        2.注释需要写在花括号中
        3.在添加属性时,class 属性需要写成 className ,for 属性需要写成 htmlFor ,这是因为 class 和 for 是 JavaScript 的保留字。
     -->
</body>
</html>           

相关文章:

  • Web前端工程师面试-HTML
  • Javascript Date对象
  • 谷歌浏览器使用记住密码功能后的input背景
  • jQuery为多元素添加统一样式
  • js 判断字符串中是否包含某个字符串
  • js 将两个对象合并成一个对象
  • 修改input的type属性
  • js查找字符串中某个字符出现的位置及次数
  • 2021-07-16 element-ui Radio-group 默认不回显问题
  • 2021-07-20 div超出省略2种方式
  • 2021-07-28 el-table-column里面的内容只显示一行
  • 页面置顶效果
  • 2021-08-26 js合并两个对象
  • 2021-08-26 el-table-column里面的内容只显示一行
  • 2021-09-26 webstome this.CliEngine is not a constructor
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • Angular Elements 及其运作原理
  • classpath对获取配置文件的影响
  • gulp 教程
  • idea + plantuml 画流程图
  • Java小白进阶笔记(3)-初级面向对象
  • js递归,无限分级树形折叠菜单
  • magento 货币换算
  • miaov-React 最佳入门
  • react-core-image-upload 一款轻量级图片上传裁剪插件
  • Redux 中间件分析
  • springboot_database项目介绍
  • 复杂数据处理
  • 什么是Javascript函数节流?
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • (145)光线追踪距离场柔和阴影
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (论文阅读31/100)Stacked hourglass networks for human pose estimation
  • (使用vite搭建vue3项目(vite + vue3 + vue router + pinia + element plus))
  • (转)shell调试方法
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • ... fatal error LINK1120:1个无法解析的外部命令 的解决办法
  • .NET Core 中的路径问题
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
  • .Net 路由处理厉害了
  • .net(C#)中String.Format如何使用
  • .NET/C# 使窗口永不获得焦点
  • .NET中的十进制浮点类型,徐汇区网站设计
  • @DateTimeFormat 和 @JsonFormat 注解详解
  • [ 隧道技术 ] cpolar 工具详解之将内网端口映射到公网
  • []AT 指令 收发短信和GPRS上网 SIM508/548
  • [ArcPy百科]第三节: Geometry信息中的空间参考解析
  • [BZOJ] 2044: 三维导弹拦截
  • [CC-FNCS]Chef and Churu
  • [EFI]Dell Inspiron 15 5567 电脑 Hackintosh 黑苹果efi引导文件
  • [Electron]ipcMain.on和ipcMain.handle的区别
  • [HTML]Web前端开发技术29(HTML5、CSS3、JavaScript )JavaScript基础——喵喵画网页
  • [Java][Android][Process] 暴力的服务能够解决一切,暴力的方式运行命令行语句
  • [LeetCode] Binary Tree Preorder Traversal 二叉树的先序遍历
  • [LeetCode刷题笔记]1 - 两数之和(哈希表)