Text selectable={true} doesn't work in recursive component.

Hi.
I made renderer for markdown text, it works recursively with marked.js lexer (semantic tree). The idea is that text like This is **bold _italic_** turns into multiple nested <Text /> components:

<Text>
This is 
<Text style={styles.strong}>bold <Text style={styles.em}>italic</Text>
</Text>
</Text>

Because I don’t know depth of each element in semantic tree (marked.lexer), I render it recursively, please you can see the whole code here: MarkdownRenderer.

When I add selectable={true} to wrapper Text component (in real code it is here):

<Text selectable={true}>
 <MarkdownRenderer markdownText={someText} /> 
</Text>

in Expo Go client the text immediately (after hot reload) became selectable! But, if I reload the app, or build it, the text is not selectable anymore.

I tried to put selectable={true} to different levels of nesting: first, end, any level etc. But a result is the same.

In Expo web text became selectable…

I have spent 24 hours trying any hypothesis that I could imagine, but I didn’t find the answer and so tired :-D.

Please share your opinion on this problem.

expo diagnostics:

  Expo CLI 4.3.2 environment info:
    System:
      OS: Linux 5.8 Ubuntu 20.04.2 LTS (Focal Fossa)
      Shell: 5.0.17 - /bin/bash
    Binaries:
      Node: 14.15.2 - /usr/local/bin/node
      Yarn: 1.22.5 - /usr/bin/yarn
      npm: 7.6.3 - /usr/local/bin/npm
    npmPackages:
      expo: ^40.0.1 => 40.0.1 
      react: ^16.13.1 => 16.13.1 
      react-dom: ^16.13.1 => 16.13.1 
      react-native: ^0.63.2 => 0.63.2 
      react-native-web: ^0.13.18 => 0.13.18 
    npmGlobalPackages:
      expo-cli: 4.3.2
    Expo Workflow: managed

I have made a snack for reproduce the bug, but it doesn’t appear in the snack, while it appears in my app :laughing: