代码之家  ›  专栏  ›  技术社区  ›  Sameer

如何关注react native组件中的下一个输入字段

  •  5
  • Sameer  · 技术社区  · 6 年前

    我有一个名为ImageTextField的组件:

    import React from 'react';
    import {TextInput, View } from 'react-native';
    
    export default class ImageTextField extends React.Component {
      render() {
        const {
          placeHolderValue, value, editable
        } = this.props;
        return (
          <View>
            <TextInput
              placeholder={placeHolderValue}
              placeholderTextColor="#b1b1b1"
              value={value}
              editable={editable}
            />
          </View>
        );
      }
    }
    

    我的屏幕:

    import React from 'react';
    import { StyleSheet, View, Text, TouchableOpacity} from 'react-native';
    import ImageTextField from '../../custom-elements/ImageTextField';
    
    export default class App extends React.Component {
      render() {
        return (
          <ImageTextField 
            onChangeText={text => this.onNameChange(text)}
            color={Colors.textFieldBlack}
            placeHolderValue="Name"
            value={this.state.name}
            autoCapitalize="words"
          />
          <ImageTextField
            onChangeText={text => this.onEmailChange(text)}
            color={Colors.textFieldBlack}
            placeHolderValue="E-mail"
            value={this.state.email}
            keyboardType='email-address'
          />
          <ImageTextField
            onChangeText={text => this.onPhoneChange(text)}
            color={Colors.textFieldBlack}
            placeHolderValue="Phone"
            value={this.state.phone}
            keyboardType="phone-pad"
          />
        );
      }
    }
    

    在上面的代码中,我在屏幕中使用了ImageTextField组件,我想聚焦下一个字段,如果用户按键盘上的next键,它需要跳转到第二个字段。

    2 回复  |  直到 6 年前
        1
  •  8
  •   Foyarash    6 年前

    添加一个将检索输入到ImageTextField组件的引用的道具。因此,渲染函数应如下所示:

    render() {
    const {
      placeHolderValue, value, editable, inputRef
    } = this.props;
    return (
      <View>
        <TextInput
          placeholder={placeHolderValue}
          placeholderTextColor="#b1b1b1"
          value={value}
          editable={editable}
          ref={inputRef}
        />
      </View>
    );
    }
    

    然后,您的应用程序组件将如下所示:

    render() {
    return (
      <ImageTextField 
        onChangeText={text => this.onNameChange(text)}
        color={Colors.textFieldBlack}
        placeHolderValue="Name"
        value={this.state.name}
        autoCapitalize="words"
        onSubmitEditing={() => this.emailAddress.focus()}
      />
      <ImageTextField
        onChangeText={text => this.onEmailChange(text)}
        color={Colors.textFieldBlack}
        placeHolderValue="E-mail"
        value={this.state.email}
        keyboardType='email-address'
        inputRef={ref => this.emailAddress = ref}
        onSubmitEditing={() => this.phoneNumber.focus()}
      />
      <ImageTextField
        onChangeText={text => this.onPhoneChange(text)}
        color={Colors.textFieldBlack}
        placeHolderValue="Phone"
        value={this.state.phone}
        keyboardType="phone-pad"
        inputRef={ref => this.phoneNumber = ref}
      />
    );
    }
    
        2
  •  1
  •   Muhammad Numan    6 年前

    组件名称=MyTextInput

    render() {
    return (
    <View>
    <TextInput
      onChangeText={this.props.onChangeText}
      placeholder="some text"
      value={this.state.value}
      ref={this.props.inputRef}
      onSubmitEditing={this.props.onSubmitEditing}
    />
      </View>
    );
    }
    

    然后,您的应用程序组件将如下所示:

    <MyTextInput 
        onChangeText={text => this.onNameChange(text)}
        color={Colors.textFieldBlack}
        placeHolderValue="Name"
        value={this.state.name}
        autoCapitalize="words"
        onSubmitEditing={() => this.email.focus()}
      />
    
      <MyTextInput 
        onChangeText={text => this.onNameChange(text)}
        color={Colors.textFieldBlack}
        placeHolderValue="email"
        value={this.state.name}
        autoCapitalize="words"
        inputRef={ref => this.email = ref}
        onSubmitEditing={() => alert('submitted')}
      />