react学习3-JSX条件渲染和列表渲染

JSX条件渲染

  • js形式条件渲染
function showForm (flag) {
  // 根据参数flag的状态显示不同内容
  if(flag) {
    // 显示登陆框
    return <div>登陆框</div>
  } else {
    // 显示注册框
    return <div>注册框</div>
  }
}
  • 元素变量
function showForm (flag) {
  // 根据参数flag的状态显示不同内容
  let form = null;
  if(flag) {
    form = <div>登陆</div>
  } else {
    form = <div>注册</div>
  }
  return form
}
  • 行内条件渲染
function showForm (flag) {
  // return 
{flag? '登陆': '注册'}
// return
{flag ?
登陆
:
注册
}
return <div>{flag && <div>条件成立就显示</div>}</div> }
  • 阻止渲染
function showForm (flag) {
  if (flag) {
    return null;
  }
  return <div>阻止渲染</div>
}

JSX列表渲染

  • 渲染多个元素
    • 数组中可以放置JSX元素
  • key只在数组上下文中有含义
    • 为了提高渲染性能
    • key在兄弟节点之间必须唯一
let arr = ['apple', 'orange', 'lemon', 'banana']
// let list = arr.map((item, index) => {
//   return 
  • {item}
  • // }) let list = [] arr.forEach((item, index) => { list.push(<li key={index}>{item}</li>) }) let element = <ul>{list}</ul>
    • JSX中可以嵌入map结构
    // 不建议按照如下方式写,可读性比较低
    let element = <ul>{arr.map((item, index) => <li key={index}>{item}</li>)}</ul>
    

    JSX案例

    • Tab效果:基于JSX实现
    • 模板的效果由数据驱动:数据的变化导致页面的变化(数据的响应式)

    代码示例:

    const tabData = [{
      id: 1,
      title: 'apple',
      content: '苹果'
    }, {
      id: 2,
      title: 'orange',
      content: '橘子'
    }, {
      id: 3,
      title: 'lemon',
      content: '柠檬'
    }]
    
    // 当前选中的条目的索引
    let currentIndex = 1
    
    function showTab (data) {
      const titles = []
      const contents = []
      data.forEach((item, index) => {
        // 动态生成标题元素
        titles.push(<li className={currentIndex === index?'active': ''} key={item.id}>{item.title}</li>)
        // 动态生成内容元素
        contents.push(<div className={currentIndex === index?'active': ''}  key={item.id}>{item.content}</div>)
      })
      return (
        <div className="tab">
          <ul>
            {titles}
          </ul>
          {contents}
        </div>
      )
    }
    
    const element = showTab(tabData)
    
    ReactDOM.render(element, document.getElementById('app'))
    

    你可能感兴趣的:(react,前端,JSX条件渲染,JSX列表渲染)