按下带有Redux形式的下一个键盘按钮后如何使用useRef钩子来选择下一个TextInput

时间:2019-04-19 07:49:10

标签: reactjs react-native redux-form textinput react-hooks

我知道我们可以使用react类方法轻松地做到这一点,因为我们有this.ref。 但是我不确定如何使用功能组件中的useRef钩子来做到这一点。

使用here

编写的技巧

这就是我要尝试的方式。

  ...

  const inputEl1 = useRef(null);
  const inputEl2 = useRef(null);
  return (
        <Field
            name="first_name"
            component={MyTextInput}
            placeholder="First name"
            ref={inputEl1}
            refField={inputEl1}
            onEnter={() => {
              inputEl2.current.focus();
            }}
          />
          />
          <Field
            name="last_name"
            placeholder="Last name"
            component={MyTextInput}
            ref={inputEl2}
            refField={inputEl2}
          />
)
...

所以我需要将ref从字段传递到MyTextInput,并在nextKeyPress上我要关注第二个输入组件,即inputEl2

//我的文字输入

...
render() {
    const {
      input: { value, onChange, onBlur },
      meta: { touched, error },
      keyboardType,
      placeholder,
      secureTextEntry,
      editable,
      selectTextOnFocus,
      style,
      selectable,
      customValue,
      underlineColorAndroid,
      autoFocus,
      maxLength,
      returnKeyType,
      onEnter,
      refField,
    } = this.props;
    const { passwordVisibility, undelineColor } = this.state;

    return (
      <View style={{ marginVertical: 8 }}>
        <TextInput
          style={[{
            height: 50,
            paddingLeft: 20,
            color: Colors.SECONDARY_COMMON,
          }, style]}
          onBlur={val => onBlur(val)}
          keyboardType={keyboardType}
          underlineColorAndroid={undelineColor}
          placeholder={placeholder}
          returnKeyType={returnKeyType || 'go'}
          value={customValue || value.toString()}
          onChangeText={onChange}
          maxLength={maxLength}
          onSubmitEditing={onEnter}
          ref={refField}
        />
)
}

3 个答案:

答案 0 :(得分:3)

const inputEl2 = useRef(null);
<TextInput
        name="first_name"           
        placeholder="First name"
        onSubmitEditing={() => inputEl2.current.focus()}
      />

<TextInput
        name="last_name"
        placeholder="Last name"
        ref={inputEl2}
      />

对我有用

答案 1 :(得分:1)

如果它是您要获取其引用的子组件,则需要将prop作为其他名称而不是ref传递。

此方法对我有用

对于钩子,请使用ref来初始化引用。

const passwordInput = useRef(null);

为自定义组件的引用道具使用其他名称,例如inputRef。

<CustomInput
  inputRef={ passwordInput }
/>

子组件-将ref设置为自定义ref属性。

const CustomInput = props => {
  const { inputRef } = props;
  
  return ( <TextInput
    { ...props }
    ref={ inputRef }
  /> );
};

答案 2 :(得分:0)

如果孩子需要使用像<TextInput ref={refField}...中的ref这样的道具,则该道具需要是ref(不是字符串):

<Field refField={inputEl2} ...