ReactJsx


jsx

创建元素
// cra 入口 index.js
import React from 'react';
import ReactDOM from 'react-dom';

// 创建并渲染React元素
const title = React.createElement('h1', null, '你好呀 React')
ReactDOM.render(title, document.getElementById('root'))
import React from 'react';
import ReactDOM from 'react-dom';

/* jsx写法
 &
 * 推荐使用jsx语法
 &
 * 写jsx就跟写html一样,更直观、友好
 &
 * jsx更能体现react声明式的特点(描述ui长什么样子)
 *
 */ 

const title = <p>这是p标签<span>p里边的span</span></p>
ReactDOM.render(title, document.getElementById('root'))
jsx注意事项
import React from 'react';
import ReactDOM from 'react-dom';

// jsx使用注意事项
/**
 * React元素的属性名使用驼峰命名法
 &
 * 特殊属性名:class => className 、 for => htmlFor 、tabindex => tabIndex
 &
 * 没有子节点的react元素可以用 /> 结束  单 <span/> 也是可以的,但不要和html弄混了
 &
 * 推荐使用小括号()包裹jsx, 从而避免js中的自动插入分号陷进。 结构也更加清晰
 *
 */

/** 
 *  其他.....
 *  基于javascript个xml的扩展语法
    他可以作为值使用
    他并不是字符串
    他也不是html 他可以配合js表达式一起使用, 他不可以和js的 语句一起使用(for,if 等…)
    所有的标签名必须小写,必须闭合,哪怕是单标签
    class写成className
    style 接收的是一个对象{},并不是字符串
    最外层只能有一个容器,
    差值表达式{}
    代码注释 尽量使用快捷键 Ctrl + /
    dangerouslySetInnerHTML={{__html:item}} 解析html标签,在input框中输入html标签可用
    点击label标签激活文本框,不能直接使用for 使用htmlFor
    参考资料: https://blog.csdn.net/weixin_46146313/article/details/107025994
 */
const title = (
  // 使用小括号里面也可以换行了
  <p className="abc">这是p标签<span>
    p里边的span
  </span>
    <span />
  </p>
)

ReactDOM.render(title, document.getElementById('root'))
jsx中使用javascript
import React from 'react';
import ReactDOM from 'react-dom';

// jsx中使用javascript表达式
// jsx中使用javascript表达式的注意事项  
/* 
 *
 * 单花括号中可以使用任意的JavaScript表达式
 &
 * JSX本身也是一个js表达式
 &
 * JSX中不能使用对象,但是在style属性中可以使用
 &
 * 不能在单花括号中直接使用 if/for 等语句
 *
 */ 
const name = '牛恒'
const age = '23'
const title = (
  <p className="abc">这是p标签
  <span>
    p里边的span
  </span>
    <span />  <br />
    名字叫:{name} <br />
    年龄是:{age} <br />
  </p>
)

ReactDOM.render(title, document.getElementById('root'))
jsx条件渲染
import React from 'react';
import ReactDOM from 'react-dom';

const isLoading = true
// jsx条件渲染  场景 loading效果
// if else
// const renderIf = () => {
//   if (isLoading) {
//     return (
//       <div>loading...</div>
//     )
//   }
//   return (
//     <div>数据加载完成显示</div>
//   )
// }

// 三木运算符
// const renderIf = () => {
//   return (
//     isLoading
//       ? <div>loading...</div>
//       : <div>数据加载完成显示</div>
//   )
// }

// 条件与
const renderIf = () => {
  return (
    isLoading
    && (<div>loading...</div>)
  )
}
const title = (
  <div className="if">
    <h1>条件渲染</h1>
    {renderIf()}
  </div>
)

ReactDOM.render(title, document.getElementById('root'))
jsx列表渲染
import React from 'react';
import ReactDOM from 'react-dom';

const songs = [
  { id: 1, name: '南山南' },
  { id: 2, name: 'King' },
  { id: 3, name: 'mc' },
]

// 列表渲染
/**
 * 如果要渲染一组数据,应该使用数组的map方法
 &
 * 注意: 渲染列表时应该添加key属性,key属性的值要保证唯一
 &
 * 原则: map遍历谁,就给谁添加key属性
 &
 * 注意:  尽量避免使用索引号作为key
 * 
 */

const renderMap = () => {
  return (
    <ul>
      {songs.map((item) => {
        return <li key={item.id}>{item.name}</li>
      })}
    </ul>
  )
}
const title = (
  <div className="if">
    <h1>列表渲染</h1>
    {renderMap()}
  </div>
)

ReactDOM.render(title, document.getElementById('root'))
jsx样式处理
/**
 *
 * jsx样式处理
 &
 * 第一种  style = {{color: red , background :skyblue}}  style 中的是一个对象
 &
 * 第二种  使用className 起类名  引入外部样式
 * 
 */
jsx总结
/**
 *
 * jsx 总结
 * 1.jsx是React 的核心内容
 &
 * 2.jsx表示在js代码中写html结构,是React声明式的体现
 &
 * 3.使用jsx配合嵌入的表达式 、条件渲染、 列表渲染,可以描述任意ui结构
 &
 * 4.推荐使用className的方式给jsx添加样式
 &
 * 5.React完全利用js语言自身的能力来编写ui,而不是造轮子增强html功能(例如v-if、 vi-show)。
 *
 */

文章作者: KarlFranz
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 reprint policy. If reproduced, please indicate source KarlFranz !
评论
  目录