3

React Native Paper 中 Modal 上的 TextInput 的一些奇怪行为。当我输入一个字符时,它被输入到文本框中,但是光标又闪回(好像它被删除了),然后又重新出现。这一切都发生得很快,角色被保留了,但看起来有点笨拙。下面的GIF来说明:

在此处输入图像描述

模态的代码相当简单:

import { Portal, Modal, Button, Title, Text, TextInput } from 'react-native-paper'; 

const [nameNew, setNameNew] = useState('')
const [emailNew, setEmailNew] = useState('')

const renderModalAddPerson = () => {
    return (
      <Portal>
        <Modal visible={visibleModalAddPerson} onDismiss={closeModalAddPerson} contentContainerStyle={styles.modalContainer}>
          <View>
            <Title style={{alignSelf:'center'}}>Title here</Title>
            <Text>  </Text>
            <TextInput
              mode="outlined"
              label="Name"
              style={{alignSelf:'center', width:'95%'}}
              value={nameNew}
              onChangeText={nameNew => setNameNew(nameNew)}
              ref={input1}
              returnKeyType='next'
              blurOnSubmit={false}
              onSubmitEditing={() => input2.current.focus()}
            />
            <TextInput
              mode="outlined"
              label="Email"
              style={{alignSelf:'center', width:'95%'}}
              value={emailNew}
              onChangeText={emailNew => setEmailNew(emailNew)}
              ref={input2}
              returnKeyType='done'
              blurOnSubmit={false}
              onSubmitEditing={() => addPerson()}
            />
            <Button
              uppercase={false} 
              style={{backgroundColor:'#2c3e50', width: '95%', alignSelf:'center', margin: 10}} 
              labelStyle={{color:'white'}}
              onPress={()=>addPerson()}
            >Add person</Button>
          </View>
        </Modal>
      </Portal>
    );
  };

在 iOS 上观察到的问题,未在 Android 上测试

4

2 回答 2

4

看起来这是 React Native 中的一个已知错误。我发现的最佳解决方案是使用 defaultValue 道具而不是值。

于 2020-11-21T17:28:40.407 回答
0

我唯一能看到的是你使用相同的变量名来更新你的状态作为状态的名称,这可能会导致一些奇怪的事情发生。

 <TextInput
          mode="outlined"
          label="Name"
          style={{alignSelf:'center', width:'95%'}}
          value={nameNew}
          onChangeText={val => setNameNew(val)}
          ref={input1}
          returnKeyType='next'
          blurOnSubmit={false}
          onSubmitEditing={() => input2.current.focus()}
        />

请尝试上述方法,因为我已经测试过并且它按预期工作。

于 2020-11-19T23:30:01.513 回答