React-1-jsx基础-事件绑定-样式处理

一.JSX基础-概念和本质

1.1 什么是JSX

JSX是JavaScript和XML(HTML)的缩写,表示在JS代码中编写HTML模版结构,它是React中编写UI模版的方式

优势: 1. HTML的声明式模版写法 2. JS的可编程能力

JSX的本质:

JSX并不是标准的JS语法,它是JS的语法扩展,浏览器本身不能识别,需要通过解析工具做解析之后才能在浏览器中运行

1.2 JSX中使用JS表达式

在JSX中可以通过 大括号语法{} 识别 JavaScript中的表达式,比如常见的变量、函数调用、方法调用等等

  1. 使用引号传递字符串
  2. 使用JavaScript变量
  3. 函数调用和方法调用
  4. 使用JavaScript对象
javascript 复制代码
	const count = 100
	
	function getName () {
	  return 'jack'
	}
	
	function App () {
	  return (
	    <div className="App">
	      this is App
	      {/* 使用引号传递字符串 */}
	      {'this is message'}
	      {/* 识别js变量 */}
	      {count}
	      {/* 函数调用 */}
	      {getName()}
	      {/* 方法调用 */}
	      {new Date().getDate()}
	      {/* 使用js对象 */}
	      <div style={{ color: 'red' }}>this is div</div>
	    </div>
	  )
	}

	export default App
1.3 JSX中实现条件渲染

在React中,可以通过**逻辑与运算符&&、三元表达式(?:)**实现基础的条件渲染

javascript 复制代码
const isLogin = true
function App () {
  return (
    <div className="App">
      {/* 逻辑与 && */}
      {isLogin && <span>this is span</span>}
      {/* 三元运算 */}
      {isLogin ? <span>jack</span> : <span>loading...</span>}
    </div>
  )
}
export default App

JSX中实现复杂条件渲染

javascript 复制代码
// 定义文章类型
const articleType = 3  // 0 1 3
// 定义核心函数(根据文章类型返回不同的JSX模版)
function getArticleTem () {
  if (articleType === 0) {
    return <div>我是无图文章</div>
  } else if (articleType === 1) {
    return <div>我是单图模式</div>
  } else {
    return <div>我是三图模式</div>
  }
}
function App () {
  return (
    <div className="App">
      {/* 调用函数渲染不同的模版 */}
      {getArticleTem()}
    </div>
  )
}
export default App

二.React中的事件绑定

1.基础事件绑定

语法:on + 事件名称 = { 事件处理程序 },整体上遵循驼峰命名法

2.使用事件对象参数

语法:在事件回调函数中设置形参e

3.传递自定义参数

语法:事件绑定的位置改造成箭头函数 的写法,在执行clickHandler实际处理业务函数的时候传递实参

4.同时传递事件对象和自定义参数

在事件绑定的位置传递事件实参e和自定义参数,clickHandler中声明形参,注意顺序对应

javascript 复制代码
function App () {
  // 基础绑定
  // const handleClick = () => {
  //   console.log('button被点击了')
  // }

  // 事件参数e
  // const handleClick = (e) => {
  //   console.log('button被点击了', e)
  // }

  // 传递自定义参数
  // const handleClick = (name) => {
  //   console.log('button被点击了', name)
  // }

  // 既要传递自定义参数 而且还要事件对象e
  const handleClick = (name, e) => {
    console.log('button被点击了', name, e)
  }
  return (
    <div className="App">
      <button onClick={(e) => handleClick('jack', e)}>click me </button>
    </div>
  )
}

三.classnames优化类名控制

classnames是一个简单的JS库,可以非常方便的通过条件动态控制class类名的显示

相关推荐
anyup_前端梦工厂6 分钟前
从浏览器层面看前端性能:了解 Chrome 组件、多进程与多线程
前端·chrome
chengpei14715 分钟前
chrome游览器JSON Formatter插件无效问题排查,FastJsonHttpMessageConverter导致Content-Type返回不正确
java·前端·chrome·spring boot·json
我命由我1234524 分钟前
NPM 与 Node.js 版本兼容问题:npm warn cli npm does not support Node.js
前端·javascript·前端框架·npm·node.js·html5·js
每一天,每一步33 分钟前
react antd点击table单元格文字下载指定的excel路径
前端·react.js·excel
浪浪山小白兔34 分钟前
HTML5 语义元素详解
前端·html·html5
小魔女千千鱼1 小时前
【真机调试】前端开发:移动端特殊手机型号有问题,如何在电脑上进行调试?
前端·智能手机·真机调试
16年上任的CTO1 小时前
一文大白话讲清楚webpack基本使用——11——chunkIds和runtimeChunk
前端·webpack·node.js·chunksid·runtimechunk
Orange3015111 小时前
【自己动手开发Webpack插件:开启前端构建工具的个性化定制之旅】
前端·javascript·webpack·typescript·node.js
ZoeLandia1 小时前
从前端视角看设计模式之行为型模式篇
前端·设计模式
securitor1 小时前
【java】IP来源提取国家地址
java·前端·python