学习react的语法(2)

126 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第18天,点击查看活动详情

前言

上一篇文章学习了react的jsx语法,以及大括号表达式,今天继续学习react的其它知识点。

react语法

事件绑定

事件绑定也是通过大括号表达式实现的,书写格式为 on+ 事件的类型。事件类型首字母要大写。

比如onClick, onMouseEnter等等

class App extends React.Component {
  clickFn (e) {
    console.log(e)
    console.log('click事件触发')
  }

  render () {
    return (
      <div className="App" onClick={this.clickFn}>
        <button>测试事件</button>
      </div >
    )
  }
}

image.png

我们打印了事件对象e,这个是react自己合成的事件对象,非原生事件对象。

但是你的阻止冒泡(stopPropagation),阻止默认事件(preventDefault)等等都可以通过这个合成事件对象实现。

条件渲染

react的条件渲染,可以通过js的条件语句实现,比如if,else-if, else语句,&&操作符三元运算符等等。

例子如下:

if语句:

当status为true时,渲染h1标签,当status为false时,渲染h2标签。

class App extends React.Component {
  status = true
  render () {
    let element = null
    if (this.status) {
      element = <h1>true</h1>
    } else {
      element = <h2>false</h2>
    }
    return (
      <div className="App">
        {element}
      </div>
    )
  }
}

&&语句:

当status为true时才会渲染后面的span内容。

class App extends React.Component {
  status = true
  render () {
    return (
      <div className="App">
        {this.status && <span>test</span>}
      </div>
    )
  }
}

列表渲染

react的列表渲染,可以js的循环语句实现。比如for循环forEachreduce等等

for循环

定义一个list函数,里面执行for循环,把遍历的jsx元素push到arr数组中,最后返回arr。

然后下面的App组件通过大括号表达式执行list函数,最后渲染出三个h1元素。

代码如下:

function list () {
  const len = 3
  const arr = []
  for (let i = 0; i < len; i++) {
    arr.push(<h1>{i}</h1>)
  }
  return arr
}
class App extends React.Component {
  render () {
    return (
      <div className="App">
        {list()}
      </div>
    )
  }
}

image.png

但是这样写是有问题的,因为你没有提供key。

image.png

因为react是通过key来判断元素是否需要更新,如果你没有提供key的话,就可能会全部更新,这样会有性能问题。

key的值推荐使用唯一的标识来区分,比如id。最好不要用index索引做key,除非你确定列表是不会变化的。