Skip to content

Menu component closes and fails to open again on re-render #4763

@julwil

Description

@julwil

Current behaviour

  • Open the Menu component
  • The parent component re-renders
  • Menu component closes and can't be opened again

Expected behaviour

  • Open the Menu component
  • The parent component re-renders
  • Menu component stays open

How to reproduce?

import React, {useState} from 'react';
import {View} from 'react-native';
import {Button, Menu, PaperProvider} from 'react-native-paper';

const MyComponent = () => {
  const [randomVarialbeToForceRerender, setRandomVarialbeToForceRerender] =
    useState(0);
  const [visible, setVisible] = useState(false);

  const openMenu = () => {
    console.debug('Opening menu');
    setVisible(true);

    /**
     * We update a state variable to force a re-render of the component.
     * A real-world example could be a network request or some other
     * asynchronous operation that updates the state.
     */
    setTimeout(() => setRandomVarialbeToForceRerender(Math.random()), 1000);
  };

  const closeMenu = () => {
    setVisible(false);
    console.debug('Closing menu');
  };

  console.debug('visible', visible);
  return (
    <PaperProvider>
      <View
        style={{
          paddingTop: 50,
          flexDirection: 'row',
          justifyContent: 'center',
        }}>
        <Menu
          visible={visible}
          onDismiss={closeMenu}
          anchor={<Button onPress={openMenu}>Show menu</Button>}>
          <Menu.Item
            onPress={() => {}}
            title={`Random  ${randomVarialbeToForceRerender}`}
          />
        </Menu>
      </View>
    </PaperProvider>
  );
};

export default MyComponent;

Preview

Simulator.Screen.Recording.-.iPhone.16.-.2025-06-23.at.12.55.03.mp4

What have you tried so far?

Memoization to avoid re-rendering the menu. However, this approach is limited and breaks
when the menu items are non-static (c.f. example)

Your Environment

software version
ios 18.5
android x
react-native 0.77.2
react-native-paper 5.13.1
node 18.20.8
npm or yarn 3.8.7
expo sdk x.x.x

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions