React之事件绑定、列表中key的使用

在学习React的Hadding Events这一章节,发现事件回调函数的几种写法,看似区别不大,但实际差异还是蛮大的。

class Toggle extends React.Component{
  constructor(props) {
    super(props);
  
    this.state = {isToggleOn:false};

    //necessary
    this.bindClick = this.bindClick.bind(this);//推荐写法
  };

  bindClick(){
    this.setState(
      prevState => ({
        isToggleOn : !prevState.isToggleOn
      })
    )
  };

  render() {
    return (
      // <button onClick={(e) => this.bindClick(e)}>   //这种写法导致每次呈现组件都要创建一个回调方法,浪费性能
      
      <button onClick={this.bindClick}>
       {this.state.isToggleOn ? "ON" : "OFF"}
      </button>
    )
  };
}

ReactDOM.render(<Toggle /> ,document.getElementById("example"))

通常使用推荐写法

 

2、列表中的key

在React中,列表中的key很关键,虽然不是必需的,但是

Keys help React identify which items have changed, are added, or are removed. Keys should be given to the elements inside the array to give the elements a stable identity

并且如果封装一个列表组件,key最好赋给封装组件,而非原始列表,

key不会作为组件的props传递

如下:key赋给ListItem而非li

function ListItem(props) {
  const value = props.value;
  return (
    // Wrong! There is no need to specify the key here:
    <li key={value.toString()}>
      {value}
    </li>
  );
}

function NumberList(props) {
  const numbers = props.numbers;
  const listItems = numbers.map((number) =>
    // Wrong! The key should have been specified here:
    <ListItem value={number} />
  );
  return (
    <ul>
      {listItems}
    </ul>
  );
}

const numbers = [1, 2, 3, 4, 5];
ReactDOM.render(
  <NumberList numbers={numbers} />,
  document.getElementById('root')
);

 

转载于:https://www.cnblogs.com/laojun/p/6112003.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值