[React] Setup 'beforeunload' listener

In this lesson we‘ll show how to take a beforeUnload call and convert it to a declarative React Component. It will handle subscribing to events, and automatically unsubscribing to prevent memory leaks.

class BeforeUnload extends React.Component {

  constructor(props) {
    super(props);
    this.alertMessage = this.alertMessage.bind(this);
  }

  componentDidMount() {
    window.addEventListener("beforeunload", this.alertMessage);
  }

  componentDidUpdate(prevProps, prevState) {
    const { active } = this.props;
    const { active: wasActive } = prevProps;

    if (wasActive && !active) {
      window.removeEventListener("beforeunload", this.alertMessage);
    } else if (!wasActive && active) {
      window.addEventListener("beforeunload", this.alertMessage);
    }
  }

  componentWillUnmount() {
    window.removeEventListener("beforeunload", this.alertMessage);
  }

  alertMessage(e) {
    if (this.props.active) {
      e.returnValue = true;
      return true;
    }
  }

  render() {
    return this.props.children;
  }
}

class App extends React.Component {

  constructor(props) {
    super(props);
    this.state = {
      active: true,
    }
    this.toggle = this.toggle.bind(this);
  }

  toggle() {
    this.setState((state) => {
        return { active: !state.active }
      }
    );
  }

  render() {
    return (
      <BeforeUnload active={this.state.active}>
        <button onClick={this.toggle}>{this.state.active ? "Active": "Inactive"}</button>
      </BeforeUnload>
    );
  }
}

ReactDOM.render(
  <App />,
  document.getElementById(‘example‘)
);

[React] Setup 'beforeunload' listener

时间: 2024-08-27 12:11:29

[React] Setup 'beforeunload' listener的相关文章

kali客户端攻击

浏览器攻击 browser_autpwn2 (BAP2) mkdir /test 为接受响应的服务器创建目录   use auxiliary/server/browser_autopwn2  set SRVHOST 192.168.56.1  set URIPATH /test #假设我们的攻击目标是 PC,并不打算依赖于 Adobe Flash 的授权.我们会排除 Android 和 Flash 的利用.   set EXCLUDE_PATTERN android|adobe_flash   

Google地图接口API之地图控件集(五)

1.默认控件集 当使用一个标准的google地图,它的控件默认设置如下: (1). Zoom-显示一个滑动条来控制map的Zoom级别,如下所示: (2). PPan-地图上显示的是一个平底碗样的控件,点击4个角平移地图,如下所示: (3). MapType-允许用户在map types(roadmap 和 satallite)之间切换,如下所示: (4). StreetView-显示为一个街景小人图标,可拖拽到地图上某个点来打开街景,如下所示: 2. 拓展控件集 除了以上默认控件集,Googl

[React Fundamentals] Development Environment Setup

In this lesson we'll setup a simple build process for converting our ES6 React components into ES5 using Babel and Webpack Install: npm i --save react react-dom npm i -D babel-loader babel-core babel-preset-es2015 babel-preset-react npm i -g babel we

[React Native + Firebase] React Native: Real time database with Firebase -- setup &amp; CRUD

Install: npm i --save firebase // v3.2.1 Config Firebase: First we need to require Firebase: import firebase from 'firebase'; Then in the component constructor, we need to init Firebase: constructor(props){ super(props); // Initialize Firebase var co

學習 React.js:用 Node 和 React.js 創建一個實時的 Twitter 流

Build A Real-Time Twitter Stream with Node and React.js By Ken Wheeler (@ken_wheeler) 簡介 歡迎來到學習 React 的第二章,該系列文章將集中在怎麼熟練並且有效的使用臉書的 React 庫上.如果你沒有看過第一章,概念和起步,我非常建議你繼續看下去之前,回去看看. 今天我們準備創建用 React 來創建一個應用,通過 Isomorphic Javascript. Iso-啥? Isomorphic. Java

React的React Native

React无疑是今年最火的前端框架,github上的star直逼30,000,基于React的React Native的star也直逼20,000.有了React,组件化似乎不再步履蹒跚,有了React Native,前端的边界似乎广阔无边.而Webpack凭借它异步加载和可分离打包等优秀的特性,走在取代Grunt和Gulp的路上.而面向未来的ES6,模块化的支持似乎已成定局. 我们现在就可以打造自己的Webpack+React+ES6环境并且开始探索起来. 这篇文章就给还没走在这条路上的前端一

react回顾

读书就像盖房子,根基要正,刚开始要选一些文风简明的...react 小书 就不错. 创建组件(extends 或是 stateless) 父子组件之间的通信(super) 事件监听(event对象和this) 渲染列表(map) 状态提升(state) 挂载阶段声明周期 更新阶段生命周期(setState) 容器类组件(this.props.children) Proptypys验证 defaultProps 高阶组件(返回新的组件类) getChildContext(childContextT

细说React(二)

上篇文章主要介绍了React的基本用法,这次将介绍一个React路由组件—react-router. 在 web 应用开发中,路由系统是不可或缺的一部分.在浏览器当前的 URL 发生变化时,路由系统会做出一些响应,用来保证用户界面与 URL 的同步.随着单页应用时代的到来,为之服务的前端路由系统也相继出现了.有一些独立的第三方路由系统,比如 director,代码库也比较轻量.当然,主流的前端框架也都有自己的路由,比如 Backbone.Ember.Angular.React 等等.那 reac

深入理解react中的虚拟DOM、diff算法

文章结构: React中的虚拟DOM是什么? 虚拟DOM的简单实现(diff算法) 虚拟DOM的内部工作原理 React中的虚拟DOM与Vue中的虚拟DOM比较 React中的虚拟DOM是什么?   虽然React中的虚拟DOM很好用,但是这是一个无心插柳的结果.   React的核心思想:一个Component拯救世界,忘掉烦恼,从此不再操心界面. 1. Virtual Dom快,有两个前提 1.1 Javascript很快  Chrome刚出来的时候,在Chrome里跑Javascript非