5

Performance oriented React Native Accordion 60 FPS

 2 years ago
source link: https://reactnativeexample.com/performance-oriented-react-native-accordion-60-fps/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

React Native Accordion (Reanimated 2)

Performance oriented React Native Accordion 60 FPS. A simple component of a common use case of collapsible - a visible title with a collapsible view beneath it.

react-native-accordion

Installation

Expo:

$ expo install @dev-event/react-native-accordion

React Native (0.60+):

$ yarn add @dev-event/react-native-accordion

and package:

$ yarn add @dev-event/react-native-accordion

Features

  • Supported Reanimated 2;
  • Fully supported on React Native and Expo;
  • Simple API but fully customizable;
  • Arrow animation indicating whether the collapsible is expanded or not;
  • Property which unmount the collapsible when it is not expanded(very useful for performance! use wisely(Beta);

Usage

For more complete example open App.tsx

import React, { useState, useRef, useCallback } from "react";
import { StyleSheet, View, Text,  StatusBar} from "react-native";
import AnimatedAccordion from "@dev-event/react-native-accordion";


const App: React.FC = () => {
  const accordionRef = useRef<AnimatedAccordion>(null);

  const [show, setShow] = useState<boolean>(false);

  const handleContentTouchable = useCallback(() => {
    return <Text style={styles.title}>Sample header</Text>
  }, [])

  const handleContent = useCallback(() => {
    return <Text style={styles.message}>Sample content</Text>
  }, [])

  const handleOpenAccordion = useCallback(() => {
    accordionRef.current?.openAccordion();
  }, []);

  return (
    <>
      <StatusBar barStyle="dark-content" />
      <View style={styles.content}>
          <TouchableOpacity style={styles.button} onPress={handleOpenAccordion}>
            <Text>Open Accordion</Text>
          </TouchableOpacity>
          <AnimatedAccordion
            ref={accordionRef}
            sizeIcon={16}
            styleChevron={styles.icon}
            renderContent={handleContent}
            onChangeState={(isShow) => setShow(isShow)}
            styleTouchable={styles.touchable}
            activeBackgroundIcon={theme.light_gray}
            inactiveBackgroundIcon={theme.light_gray}
            handleContentTouchable={handleContentTouchable}
          />
      </View>
    </>
  );
};


const styles = StyleSheet.create({
  content:{
    flex: 1,
    backgroundColor: "#FFFFFF"
  },
  touchable: {
    backgroundColor: '#181829',
    height: 50,
  },
  title: {
    fontSize: 14,
    color: '#FFFFFF',
    fontWeight: '500',
  },
  message: {
    fontSize: 16,
    color: '#FFFFFF',
    fontWeight: '500',
  },
  icon: {
    height: 24,
    width: 24,
  },
  button: {
    padding: 16,
  },
});

Props

name description required type default ref Ref to get access to the Accordion View NO ref

isArrow If set to false the arrow indicating whether the collapsible-view is expanded or not will not be displayed. NO boolean true disabled Enabled/disabled of clicks header(with arrow) NO boolean false initExpand If true then the collapsible will be expanded on mounting content(For example: with api) NO boolean false colorIcon Color tint icon arrow NO string #16182B sizeIcon Size icon arrow NO number 16 otherProperty Configuration TouchableWithoutFeedback NO ViewProps

isStatusFetching Displays an indicator if the content is loaded from the API. NO boolean false initialMountedContent Start mounted content (Memory optimization) YES boolean false isUnmountedContent if true then the collapsible will unmount when closing animation ends. (Memory optimization) NO boolean false activeBackgroundIcon Expanded background color arrow NO string #E5f6FF inactiveBackgroundIcon InExpanded background color arrow NO string #FFF0E4 contentHeight Default height content (optimization) NO number 0 handleIcon Render custom icon NO JSX.Element

onAnimatedEndExpanded Callback closed Accordion NO void NO onAnimatedEndCollapsed Callback opened Accordion NO void

handleCustomTouchable Render custom header NO boolean false handleContentTouchable Render content header NO JSX.Element

handleIndicatorFetching Render JSX.Element(Progress). Default - ActivityIndicator NO JSX.Element

renderContent Render content NO JSX.Element

configExpanded Configuration withTiming. NO Animated.WithTimingConfig

configCollapsed Configuration withTiming. NO Animated.WithTimingConfig

styleChevron Style Animated.View NO Animated.AnimateStyle

styleTouchable Style Animated.View NO Animated.AnimateStyle

styleContainer Style View NO ViewStyle

onChangeState Callback onChange state Accordion(open/close) NO void

openAccordion Available at ref link NO void

GitHub

https://github.com/dev-event/react-native-accordion


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK