TextInput внутри текстового компонента теряет фокус после каждого ввода (IOS)

#react-native #react-native-ios

#react-native #react-native-ios

Вопрос:

Я пытаюсь создать заполняющий пробел для абзаца с результатом рендеринга React Native

Однако всякий раз, когда я ввожу символ, клавиатура автоматически закрывается.

Я использую React Native 0.63.3

Ниже приведен мой код для App.js:

 import React, { useState } from 'react'
import { StyleSheet, Text, TextInput, View } from 'react-native'


export default function App() {
  const [txt, setTxt] = useState('');

  return (
    <View style={{ marginTop: 44 }}>
      <Text>
        <View style={{ height: 20, width: 100, borderWidth: 1, borderColor: 'black' }} >
          <TextInput value={txt} onChangeText={setTxt} />
        </View>
               Lorem ipsum dolor sit amet, consectetur adipiscing elit. In ullamcorper volutpat velit id mollis. Nulla bibendum congue malesuada. Phasellus scelerisque est quis lacinia porta. Etiam sit amet vehicula nisl. Sed porttitor vestibulum tellus, ac convallis quam pulvinar sit amet. Suspendisse ac consequat ante. Duis cursus, leo a hendrerit efficitur, libero nisi tristique erat, cursus venenatis est tellus eget nisi. Etiam dictum, tellus sed ultrices mattis, lectus quam convallis sem, cursus maximus turpis nisl id nulla. Vestibulum pharetra erat at velit tempor, vitae interdum turpis blandit.
         </Text>
    </View>
  )
}  

Интересно, что-то не так в моем коде или есть другой подход с представлением вместо текста, который может привести к тому же результату?

Обновление: всякий раз, когда я пытался использовать более одного TextInput в текстовом компоненте, один из них приводил к сбою приложения (отладка показывает ошибку «Попытка получить метрики макета из загрязненного узла Yoga»)

 import React, { useState } from 'react'
import { StyleSheet, Text, TextInput, View } from 'react-native'


export default function App() {
  const [txt, setTxt] = useState('');

  return (
    <View style={{ marginTop: 44, flex: 1 }}>
      <Text style={{ flex: 1 }}>
        <View
          style={{
            height: 20,
            width: 100,
            borderWidth: 1,
            borderColor: 'black',
          }}
        >
          <TextInput
            autoCorrect={false}
            value={txt}
            onChangeText={setTxt}
          />
        </View>
      Lorem ipsum dolor sit amet, consectetur adipiscing elit. In ullamcorper
      volutpat velit id mollis. Nulla bibendum congue malesuada. Phasellus
      scelerisque est quis lacinia porta. Etiam sit amet vehicula nisl. Sed
      porttitor vestibulum tellus, ac convallis quam pulvinar sit amet.
      Suspendisse ac consequat ante. Duis cursus, leo a hendrerit efficitur,
      libero nisi tristique erat, cursus venenatis est tellus eget nisi. Etiam
      dictum, tellus sed ultrices mattis, lectus quam convallis sem, cursus
      maximus turpis nisl id nulla. Vestibulum pharetra erat at velit tempor,
      vitae interdum turpis blandit uhm.
      <View
          style={{
            height: 20,
            width: 100,
            borderWidth: 1,
            borderColor: 'black',
          }}
        >
          <TextInput
            autoCorrect={false}
            value={txt}
            onChangeText={setTxt}
          />
        </View>
      </Text>
    </View>
  )
}  

Ответ №1:

Добавьте flex: 1 в стили вашего текстового тега. Если это ваш главный экран, вам также следует добавить flex: 1 в самый верхний вид

 <View style={{ marginTop: 44, flex: 1, backgroundColor: 'red' }}>
  <Text style={{ flex: 1 }}>
    <View
      style={{
        height: 20,
        width: 100,
        borderWidth: 1,
        borderColor: 'black',
      }}
    >
      <TextInput
        style={{ zIndex: 999 }}
        value={txt}
        onChangeText={setTxt}
      />
    </View>
    Lorem ipsum dolor sit amet, consectetur adipiscing elit. In ullamcorper
    volutpat velit id mollis. Nulla bibendum congue malesuada. Phasellus
    scelerisque est quis lacinia porta. Etiam sit amet vehicula nisl. Sed
    porttitor vestibulum tellus, ac convallis quam pulvinar sit amet.
    Suspendisse ac consequat ante. Duis cursus, leo a hendrerit efficitur,
    libero nisi tristique erat, cursus venenatis est tellus eget nisi. Etiam
    dictum, tellus sed ultrices mattis, lectus quam convallis sem, cursus
    maximus turpis nisl id nulla. Vestibulum pharetra erat at velit tempor,
    vitae interdum turpis blandit.
  </Text>
</View>
  

Комментарии:

1. Я попытался использовать приведенный выше код непосредственно на App.js но проблема все еще существует.