Skip to main content
Version: Next

Migration from v3 to v4

Table of Contents#

What's New?#

React Native Elements v4 introduces many features including few new components, fully typescript support and some breaking changes whose migration is being given below.

Migration to Functional#

These components are converted to Functional Components,

  • Button
  • Slider
  • Tooltip
  • Image


How would it affect?#

ref may not work as of now, but would be added in future releases.

Migration to Pressable#

The Reason#


Earlier React Native Elements was using Touchable as touch handler, but since v4.0 will use Pressable

Tests migrated to React Native Testing library#

Handling breaking changes#

Pressable is a Core Component wrapper that can detect various stages of press interactions on any of its defined children.

This change would let you use onPressIn & onPressOut APIs in RNE components, For example

  <CheckBox    title="I agree"+   onPressIn={()=>{}}+   onPressOut={()=>{}}    onPress={() => {}}  />

and the rest of props for Pressable can be added via pressableProps API

  <ButtonGroup+   pressableProps={{android_ripple:{radius:2}}}  />

Button Component still uses Touchable, As Pressable works differently compared to TouchableNativeFeedback, for instance, the Button will apply the primary color as the button background color, however, the pressable ripple effect will then render behind the button, which results in no ripple.


Tooltip is one of core component of RNE, Since v4 this component would be stateless and would use visible, onOpen & onClose Props for its working

  <Tooltip+   visible={open}+   onOpen={() => {+      setOpen(true);+   }}+   onClose={() => {+      setOpen(false);+   }}    popover="Hey All"  />

You can still use Tooltip as stateful component by doing:

const ControlledTooltip: React.FC<TooltipProps> = (props) => {  const [open, setOpen] = React.useState(false);  return (    <Tooltip      visible={open}      onOpen={() => {        setOpen(true);      }}      onClose={() => {        setOpen(false);      }}      {...props}    />  );};


variant can be => h1 h2 h3 h4 caption props

  <Text-  h1-  h1style={{}}+  variant="h1"   style={{}}  />