yesmeck / react-with-hooks

[OUTDATED]Ponyfill for the React Hooks API (Support RN)
https://codesandbox.io/s/olx6zp44n6
MIT License
152 stars 11 forks source link

react-with-hooks

Build Status codecov

Polyfill and ponyfill for the React Hooks API.

Works on React Native!

⚠️The code on master branch is still WIP.

Install

$ npm i react-with-hooks --save

Usage

You can use react-with-hooks as a polyfill; in this case, when you later transition to native React Hooks you will only need to remove the import 'react-with-hooks/polyfill' statement:

import 'react-with-hooks/polyfill'; // import the polyfill in the entry of your application
import React, { useState, useEffect } from 'react';

const Counter = () => {
  const [ count, setCount ] = useState(0);
  useEffect(() => {
    document.title = "count is " + count;
  })
  return (
    <div>
      {count}
      <button onClick={() => setCount(count + 1)}>+</button>
      <button onClick={() => setCount(count - 1)}>-</button>
    </div>
  );
};

Alternatively, you can use this library as a ponyfill with the withHooks helper. In this case, you will have to refactor your code later when you transition to use native React Hooks.

import React from 'react';
import withHooks, { useState, useEffect } from 'react-with-hooks';

const Counter = withHooks(() => {
  const [ count, setCount ] = useState(0);
  useEffect(() => {
    document.title = "count is " + count;
  })
  return (
    <div>
      {count}
      <button onClick={() => setCount(count + 1)}>+</button>
      <button onClick={() => setCount(count - 1)}>-</button>
    </div>
  );
});

Live Demo

API Reference

License

MIT