Skip to content

A react context provider for LIFF (LINE Front-end Framework)

License

Notifications You must be signed in to change notification settings

epaew/react-liff

Folders and files

NameName
Last commit message
Last commit date
Jan 11, 2024
Nov 22, 2023
Nov 22, 2023
Nov 22, 2023
Nov 25, 2022
Nov 22, 2023
Jun 11, 2020
Jun 13, 2022
Nov 22, 2023
Nov 22, 2023
Jan 11, 2024
Dec 2, 2023
Nov 26, 2022
Jun 11, 2022

Repository files navigation

react-liff

npm version Build Status Maintainability

A react context provider for LIFF (LINE Front-end Framework)

Requirements

  • React v18.0 or later
    • React Native is not supported.
  • LIFF SDK version >=2.19.1

Getting started

When you use NPM version of LIFF SDK (Recommended)

  1. Create your React application development environment.

    • e.g. npx create-react-app app-name
  2. Add react-liff to your app dependencies.

    npm i --save @line/liff react-liff
    # or
    yarn add @line/liff react-liff
  3. Import react-liff to your app and use it!

    • An example of src/App.js

      import React, { useEffect, useState } from 'react';
      import { useLiff } from 'react-liff';
      
      import './App.css';
      
      const App = () => {
        const [displayName, setDisplayName] = useState('');
        const { error, isLoggedIn, isReady, liff } = useLiff();
      
        useEffect(() => {
          if (!isLoggedIn) return;
      
          (async () => {
            const profile = await liff.getProfile();
            setDisplayName(profile.displayName);
          })();
        }, [liff, isLoggedIn]);
      
        const showDisplayName = () => {
          if (error) return <p>Something is wrong.</p>;
          if (!isReady) return <p>Loading...</p>;
      
          if (!isLoggedIn) {
            return (
              <button className="App-button" onClick={liff.login}>
                Login
              </button>
            );
          }
          return (
            <>
              <p>Welcome to the react-liff demo app, {displayName}!</p>
              <button className="App-button" onClick={liff.logout}>
                Logout
              </button>
            </>
          );
        };
      
        return (
          <div className="App">
            <header className="App-header">{showDisplayName()}</header>
          </div>
        );
      };
      
      export default App;
    • An example of src/index.js

      import React from 'react';
      import ReactDOM from 'react-dom';
      import { LiffProvider } from 'react-liff';
      
      import './index.css';
      import App from './App';
      
      const liffId = process.env.REACT_APP_LINE_LIFF_ID;
      
      ReactDOM.render(
        <React.StrictMode>
          <LiffProvider liffId={liffId}>
            <App />
          </LiffProvider>
        </React.StrictMode>,
        document.getElementById('root')
      );

When you use CDN version of LIFF SDK

  1. Create your React application development environment.
    • e.g. npx create-react-app app-name
  2. Add react-liff to your app dependencies.
    npm i --save react-liff
    # or
    yarn add react-liff
  3. Update index.html to load LIFF SDK
  4. Import react-liff to your app and use it!

API

LiffProvider props

  • liffId: string, required
    • The ID of your LIFF application.
  • withLoginOnExternalBrowser: boolean, optional
  • plugins: Array<LiffPlugin | [LiffPlugin, LiffPluginOption]>, optional
    • List of LIFF plugin instances.
    • If you need to pass option to plugin, you can use the list of tuple [pluginInstance, pluginOption].
  • callback: (liff: Liff) => Promise<void>, optional
    • Callback function that fires after liff.init() has been succeeded.

LiffConsumer / useLiff return values

  • error: unknown (is LiffError | undefined in many cases)
    • Returns an error if liff.init() was failed.
  • isLoggedIn: boolean
    • Returns whether the user is logged in.
  • isReady: boolean
    • Returns true after liff.init() has successfully completed. Otherwise, returns false.
  • liff: Liff
    • Returns liff object.

CHANGELOG

CHANGELOG

LICENSE

MIT