`
sillycat
  • 浏览: 2551681 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

ReactJS(3)Handling Events - Conditional Rendering - List and Keys

    博客分类:
  • UI
 
阅读更多
ReactJS(3)Handling Events - Conditional Rendering - List and Keys

Handling Events
function ActionLink(){   //component
    function handleClick(e){
        e.preventDefault(); // return false
        console.log(’The link was clicked.');
    }

    return (
        <a href=“#” onClick={handleClick}>Click Me</a>
    );
}

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

    // This binding is necessary to make `this` work in the callback
    this.handleClick = this.handleClick.bind(this);
  }

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

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

Conditional Rendering
https://facebook.github.io/react/docs/conditional-rendering.html
function UserGreeting(props) {
  return <h1>Welcome back!</h1>;
}

function GuestGreeting(props) {
  return <h1>Please sign up.</h1>;
}

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

ReactDOM.render(
  // Try changing to isLoggedIn={true}:
  <Greeting isLoggedIn={true} />,
  document.getElementById('root')
);

let will limit the variable scope
http://cookfront.github.io/2015/05/28/es6-let-const/

class LoginControl extends React.Component {
    constructor(props) {
        super(props);
        this.handleLoginClick = this.handleLoginClick.bind(this);
        this.handleLogoutClick = this.handleLogoutClick.bind(this);
        this.state = {isLoggedIn: false};
    }

    handleLoginClick() {
        this.setState({isLoggedIn: true});
    }
   
    handleLogoutClick() {
        this.setState({isLoggedIn: false});
    }

    render() {
        const isLoggedIn = this.state.isLoggedIn;
        let button = null;
        if (isLoggedIn) {
            button = <LogoutButton onClick={this.handleLogoutClick} />;
        } else {
            button = <LoginButton onClick={this.handleLoginClick} />;
        }
        return ( <div> <Greeting isLoggedIn={isLoggedIn} /> {button} </div> );
    }
}

Inline If with && Operator
function Mailbox(props) {
  const unreadMessages = props.unreadMessages;
  return (
    <div>
      <h1>Hello!</h1>
      {unreadMessages.length > 0 &&
        <h2>
          You have {unreadMessages.length} unread messages.
        </h2>
      }
      {unreadMessages.length <= 0 &&
        <h2>
          No new messages
        </h2>
      }
    </div>
  );
}

//const messages = ['React', 'Re: React', 'Re:Re: React'];
const messages = [];
ReactDOM.render(
  <Mailbox unreadMessages={messages} />,
  document.getElementById('root')
);

We can inline if and else
{isLoggedIn ? ( <LogoutButton onClick={this.handleLogoutClick} /> ) : ( <LoginButton onClick={this.handleLoginClick} /> )}

Preventing Component from Rendering
function WarningBanner(props) {
    if (!props.warn) { return null; }
    return ( <div className="warning"> Warning! </div> );
}

if there is warn in props, system will ignore rendering the warning message.

Lists and Keys
https://facebook.github.io/react/docs/lists-and-keys.html

const numbers = [1, 2, 3, 4, 5];
const doubled = numbers.map((number) => number * 2);

const numbers = [1, 2, 3, 4, 5];
const listItems = numbers.map((numbers) =>
  <li>{numbers}</li>
);

ReactDOM.render(
  <ul>{listItems}</ul>,
  document.getElementById('root')
);

Basic List Component
const listItems = numbers.map((number) =>
    <li key={number.toString()}>
        {number}
    </li>
);

Keys
Keys is given to the elements inside the array to give the elements a stable identity.
const todoItems = todos.map((todo) =>
    <li key={todo.id}> {todo.text} </li>
);

For the one we do not have a unique ID, we can directly use the index of that list
const todoItems = todos.map((todo, index) =>
    <li key={index}> {todo.text} </li>
);

Extracting Components with Keys
Keys Only Be Unique Among Siblings




References:
https://facebook.github.io/react/docs/handling-events.html






分享到:
评论

相关推荐

    js-conditional-compile-loader-1.0.15.tgz

    【js-conditional-compile-loader 1.0.15】是一个专为JavaScript代码条件编译设计的加载器,用于处理项目中的环境特定代码。在软件开发中,有时我们需要根据不同的运行环境(例如开发、测试和生产)来编译不同的代码...

    perl-Module-Load-Conditional-0.54-3.el7.noarch.rpm

    离线安装包,亲测可用

    rh-perl524-perl-Module-Load-Conditional-0.64-379.el7.noarch.rpm

    官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装

    前端开源库-lws-conditional-get

    在压缩包文件"conditional-get-master"中,可能包含了lws-conditional-get库的源代码、示例项目、文档和配置文件等内容。通过查看源代码,开发者可以深入理解其工作原理,并根据自身需求进行定制化开发。同时,文档...

    Hierarchical Text-Conditional.pdf

    Hierarchical Text-Conditional Image Generation with CLIP Latents Hierarchical Text-Conditional Image Generation with CLIP Latents是基于CLIP模型的图像生成技术,该技术可以生成高质量的图像,具有语义和...

    perl-Module-Load-Conditional-0.68-395.el8.noarch(1).rpm

    离线安装包,亲测可用

    深度学习-Hierarchical Text-Conditional.pptx

    深度学习-Hierarchical Text-Conditional Image Generation with CLIP Latents Hierarchical Text-Conditional Image Generation是深度学习领域中的一种基于CLIP特征的文本生成图像模型。该模型由CLIP和扩散模型...

    webpack-conditional-loader:JavaScript的C条件指令

    npm install --save-dev webpack-conditional-loader 用法 在您的webpack.config.js 将webpack-conditional-loader作为数组中的最后一个加载器,因此它将先处理所有其他代码。 module: { rules : [ { test : / \...

    前端项目-conditional-field.zip

    前端项目-conditional-field,Javascript component that shows and hides page elements based on form field values

    ember-cli-conditional-compile:Ember的条件编译(功能标志)

    ember-cli-conditional-compile ember-cli-conditional-compile的目标是为Ember应用程序提供易于使用的功能开关,以使隐藏在禁用的功能开关后面的代码不在编译后的代码中。入门这是一个ember-cli插件,因此您所需要...

    Laravel开发-laravel-conditional-migrations

    总结来说,`laravel-conditional-migrations`是一种优化Laravel迁移流程的方法,它增强了对迁移执行的控制,使开发者能够根据需要和上下文来执行特定的数据库变更。理解和正确使用这一技术能显著提高项目管理和部署...

    前端开源库-lws-conditional-get.zip

    《前端开源库-lws-conditional-get.zip》是一个与前端开发相关的压缩包,主要涉及的是一个名为“lws”的开源库,以及它对HTTP协议中"Conditional Get"功能的支持。在这个库中,开发者可以找到实现这一功能的相关代码...

    Python库 | django-conditional-aggregates-0.3.0.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:django-conditional-aggregates-0.3.0.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    Python库 | coverage-conditional-plugin-0.4.0.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:coverage-conditional-plugin-0.4.0.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    M4-DQ3-Conditional-Rendering-nyc-web-040218

    条件渲染讨论问题 分组聚会并克隆该存储库。 出于本讨论问题的目的,您应该仅在components/MenuBar.js和containers/MainBox.js 。 您的最终目标是使该应用程序像这样运行: 需要考虑的几件事: ...

    Li-StoryGAN-A-Sequential-Conditional-GAN-for-Story-Visualization

    Li-StoryGAN: A Sequential Conditional GAN for Story Visualization Li-StoryGAN是一种基于序列条件GAN的故事可视化模型,旨在从多句段落生成一系列图像,以描绘故事的整个过程。该模型具有深度上下文编码器、...

    react-hooks-dq-conditional-rendering

    讨论问题:有条件的渲染! 分组聚会并克隆该存储库。 出于本讨论问题的目的,您应该仅在components/MenuBar.js和containers/MainBox.js 。 您的最终目标是使该应用程序像这样运行: 需要考虑的几件事: ...

    Event-Conditional-Stop.zip_event_labview event

    标题“Event-Conditional-Stop.zip_event_labview event”表明这个压缩包文件包含了一个与LabVIEW事件结构相关的程序,具体为“事件结构Event Conditional Stop.vi”。这个虚拟仪器(VI)可能设计用于在特定条件满足...

    conditional-compile-loader

    conditional-compile-loader conditional-compile-loader 根据设定的参数对 vue、js、jsx 和 css(less, sass 等) 代码进行条件编译。 安装 先安装 conditional-compile-loader npm install -D conditional-compile-...

    2019-KDD-Conditional Random Field Enhanced Graph Convolutional N

    摘要:图卷积神经网络近年来受到越来越多的关注。与标准卷积神经网络不同,图卷积神经网络对图数据进行卷积运算。与一般数据相比,图数据具有不同节点间的相似性信息。因此

Global site tag (gtag.js) - Google Analytics