条件 Render ( Day 9 )

在 React 中,你可以建立不同的 component 来封装你需要的行为。接着,你可以根据你的应用程序的 state,来 render 其中的一部份。

在 JSX 里面写条件式的两种方法:

  • 使用 &&, ||
  • 三元运算式 ?:

利用不同条件去绘制 render 不同的 element 或元件 component,要注意的事情如列:

  • falsy expression 仍会回传 falsy expression
  • 防止 Component Render // return null 就不会渲染这个 component

以下举例

一般使用 &&, ||

function Mailbox(props) {
  const unreadMessages = props.unreadMessages;
  return (
    <div>
      <h1>
        { unreadMessages[0] }{ unreadMessages.length > 1 &&
          (<span>...more({unreadMessages.length - 1})</span>)
        }          
      </h1>
    </div>
  );
}


const list = ['你好', 'Hi', '最近如何'];
ReactDOM.render(
  <Mailbox unreadMessages={list} />,
  document.getElementById('root')
);

注意 falsy expression 仍会回传 falsy expression

0 && 'aaa'
//0 => template 显示 0

"0" && 'aaa'
//'aaa' => template 显示 'aaa'

!!0 && 'aaa'
false => template 即不会显示

!!"0" && 'aaa'
//'aaa' => template 显示 'aaa'

防止 Component Render 使用 return null

function WarningBanner(props) {
  if (!props.warn) {
    return null;
  }
  return <h1>Warning!!!</h1>
}

class Page extends React.Component {
  constructor(props) {
    super(props);
    this.state = {showWarning: true};
    this.handleToggleClick = this.handleToggleClick.bind(this);
  }

  handleToggleClick() {
    this.setState(state => ({
      showWarning: !state.showWarning
    }));
  }

  render() {
    return (
      <div>
       <button onClick={this.handleToggleClick}>
          { this.state.showWarning ? 'Hide' : 'Show'}
       </button>
        <WarningBanner warn={this.state.showWarning} />
      </div>
    );
  }
}

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

以上今天

参考资料:
https://zh-hant.reactjs.org/docs/conditional-rendering.html


<<:  Android学习笔记14

>>:  [Tableau Public] day 23:台湾姓氏分布分析-1

Day7-JDK查看正在运行的Java进程工具:jps

前言 在介绍JDK有哪些工具时,第二大列应该是『故障排查、分析、监控和管理工具』,但我想先从监控工具...

[30天 Vue学好学满 DAY14] prop & emit-1

组件中经过引用、连接,会产出树状关系图,即为父元件与子元件的关系。 -> 父子元件中不存在继承...

【30天Lua重拾笔记30】进阶议题: 与C交互(+Python)

补齐遗失副本,时间线回归。 本文同步发表於个人网站 Hello, Lua & C 现在,我...

[第28天]30天搞懂Python-阶乘

前言 使用递回方法实作一个阶乘函数,来计算阶乘。 程序实作 # 使用递回方法实作一个阶乘函数 def...

Day27 Apex 配对机制分析

Apex 为一款笔者近期最喜欢的竞技游戏,想藉着分析的名义,趁机推广一下这款大逃杀游戏。由於此游戏一...