美文网首页
react 事件处理&条件渲染

react 事件处理&条件渲染

作者: 张延伟 | 来源:发表于2017-10-13 10:40 被阅读187次

处理事件

react事件使用驼峰命名,而不是完全小写。
通过JSX我们可以传递一个函数作为事件处理程序。
与DOM绑定事件类似:

function ActionLink() {
  function handleClick(e) {
    e.preventDefault();
    console.log('The link was clicked.');
  }

  return (
    <a href="#" onClick={handleClick}>
      Click me
    </a>
  );
}

注意:在 React 中你不能通过返回 false(即 return false; ) 来阻止默认行为。必须明确调用 preventDefault 。

当使用一个 ES6 类定义一个组件时,通常的一个事件处理程序是类上的一个方法。
看一个例子:

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

    // 这个绑定是必要的,使`this`在回调中起作用
    this.handleClick = this.handleClick.bind(this);
  }

  handleClick() {
    console.log('this is:',this);
    this.setState(prevState => ({
      isToggleOn: !prevState.isToggleOn
    }));
  }

  render() {
    return (
      <button onClick={this.handleClick}>
        {this.state.isToggleOn ? 'ON' : 'OFF'}
      </button>
    );
  }
}

ReactDOM.render(
  <Toggle />,
  document.getElementById('root')
);

上面代码中特意在构造函数中指定了handleClick执行时this的指向。
在JSX回调中你必须注意this的指向。 在 JavaScript 中,类方法默认没有绑定(bind)的。如果你忘记绑定 this.handleClick并将其传递给onClick,那么在直接调用该函数时,this会是 undefined

我们可以使用CodePen试试修改代码的结果:
把构造函数中的绑定删掉,再次点击,控制台打印this is:undefined,并且报错Cannot read property 'setState' of undefined
所以:我们就是要使用方法使handleClick执行时的this执行正确:

  • 构造函数绑定this
  • 箭头函数;
  • 调用时绑定onClick={this.handleClick.bind(this)}

所以我们在使用时一定要特别注意事件处理函数this的指向问题。
还有一点:
setState()可以接收一个函数,这个函数接受两个参数,第一个参数表示上一个状态值,第二参数表示当前的 props:

this.setState((prevState, props) => ({
    //do something here
}));

条件渲染

在 React 中,你可以创建不同的组件封装你所需要的行为。然后,只渲染它们之中的一些,取决于你的应用的状态。

在函数中使用条件语句

React 中的条件渲染就和在 JavaScript 中的条件语句一样。使用 JavaScript 操作符如if或者条件操作符来创建渲染当前状态的元素,并且让 React 更新匹配的 UI :

function Greeting(props) {
  const isLoggedIn = props.isLoggedIn;
  if (isLoggedIn) {
    return <UserGreeting />;
  }
  return <GuestGreeting />;
}

ReactDOM.render(
  // 修改为 isLoggedIn={true} 试试:
  <Greeting isLoggedIn={false} />,
  document.getElementById('root')
);

在JSX中使用逻辑 && 操作符

在 JavaScript 中, true && expression 总是会得到 expression ,而 false && expression 总是执行为 false

render() {
    return (
      <div>
        <h1>Hello,{this.props.name.length>0 && "World"}</h1>
        <h2>It is {this.state.date.toLocaleTimeString()}</h2>
        <button onClick={this.handleClick}>点击</button>
      </div>
    )
  }

在JSX中使用三目表达式

另一个用于条件渲染元素的内联方法是使用 JavaScript 的条件操作符 condition ? true : false

render() {
    return (
      <div>
        <h1>Hello,{this.props.name.length>0 && "World"}</h1>
        <h2>It is {this.state.date.toLocaleTimeString()}</h2>
        <button onClick={this.handleClick.bind(this)}>{this.state.on ? 'on' : 'off'}</button>
      </div>
    )
  }

防止组件渲染

在下面的例子中,根据名为warn的 prop 值,呈现 <WarningBanner /> 。如果 prop 值为 false ,则该组件不渲染:

function WarningBanner(props) {
  if (!props.warn) {
    return null;
  }

  return (
    <div className="warning">
      Warning!
    </div>
  );
}

从组件的 render方法返回 null 不会影响组件生命周期方法的触发。

相关文章

  • react 事件处理&条件渲染

    处理事件 react事件使用驼峰命名,而不是完全小写。通过JSX我们可以传递一个函数作为事件处理程序。与DOM绑定...

  • 小程序学习

    template import的作用域与include 数据绑定 列表渲染 条件渲染 模板 事件 兼容处理 创建一...

  • 第二天_vue基础语法_Vue.js2.0+Node+ES6+M

    模板语法 class和style绑定 条件渲染 vue事件处理器 vue组件

  • react 基本使用

    前端核心问题 如何处理数据和视图之间的关系 react 和 vue 两个区别 => 事件监听 数据渲染 react...

  • 2018-11-07 react 事件处理

    react事件处理和dom事件处理是相似的。 react: Dom: 所以: React事件绑定属性的命名采用驼峰...

  • react条件渲染

    条件渲染的几种形式 &&短路运算符 总结:根据组件代码的复杂程度,可以依次选择。

  • react 条件渲染

    有时候我们需要根据条件来决定是否渲染一个组件,那么我们会怎么写呢? 1. 用if判断条件,然后return 不同的...

  • React 条件渲染

    在 React 中,你可以创建不同的组件来封装各种你需要的行为。然后还可以根据应用的状态变化只渲染其中的一部分。 ...

  • react 条件渲染

    条件渲染相当于vue的v-if 和 v-show 小结if else if(A){a}else{b} 通过...

  • React条件渲染

    在 React 中,你可以创建不同的组件来封装各种你需要的行为。然后,依据应用的不同状态,你可以只渲染对应状态下的...

网友评论

      本文标题:react 事件处理&条件渲染

      本文链接:https://www.haomeiwen.com/subject/bmznyxtx.html