如何通过 ref 获取 textinput 的文本/值?

Posted

技术标签:

【中文标题】如何通过 ref 获取 textinput 的文本/值?【英文标题】:How can I get the text / value of a textinput by its ref? 【发布时间】:2020-09-07 17:33:33 【问题描述】:

在我的父母中,我有以下代码:

所以我通过这种方式在其中呈现我的自定义输入:

我的疑问是如何使用 ref 在此父项的任何部分访问每个输入的文本。有人可以帮助我吗?

文本输入组件:

https://gist.github.com/ThallyssonKlein/4e054bc368ebc153fbf9222e304ff887

【问题讨论】:

【参考方案1】:

我无法解决问题,显然没有办法在纯 React-Native 中获取此属性。

所以我开始使用 react-native-paper 包的 TextInput 组件。这样,相同的代码就可以工作了,我现在可以通过以下摘录获取文本:

console.log(refContainerStep1.current.state.value);

【讨论】:

【参考方案2】:

使用 useRef() 代替 createRef();

const textInput = useRef(null);

<TextInput
   ref=textInput
....../>

【讨论】:

这是使用“useRef”的参考内容:gist.github.com/ThallyssonKlein/…。我怎样才能得到它的文本?【参考方案3】:

您可以通过refContainerStep1.current 访问参考。

然后您可以检查 Prototype 属性以检查您可以使用哪些方法。

我注意到有一个名为_getText 的函数可用于获取值。

在 onPress 中获取值的示例:

const onPress = () =>  
  console.log(refContainerStep1.current.__proto__); // See available methods
  console.log(refContainerStep1.current._getText()); // Grab the value

【讨论】:

current._getText() 对我来说不存在,这是 proto 的返回:gist.github.com/ThallyssonKlein/…【参考方案4】:

这样做

  const onButtonClick = () => 
      console.log('get value from parent')
      console.log(ref1.current.props.value)
      console.log(ref2.current.props.value)
  ;

Example in expo

父母

import * as React from 'react';
import  Text, View, StyleSheet,TextInput  from 'react-native';
import Constants from 'expo-constants';

import MyTextInput from './components/AssetExample';

import  Card  from 'react-native-paper';

export default function App() 
  const ref1 = React.createRef();
  const ref2 = React.createRef();

  const onButtonClick = () => 
      console.log(ref1.current.props.value)
      console.log(ref2.current.props.value)
  ;

  return (
    <View style=styles.container>
      <Card>
      <button onClick=onButtonClick>get value</button>
      <MyTextInput  label='label 2' secure=false  ref=ref1 />
      <MyTextInput  label='label 1' secure=true  ref=ref2 />
      </Card>
    </View>
  );


const styles = StyleSheet.create(
  container: 
    flex: 1,
    justifyContent: 'center',
    paddingTop: Constants.statusBarHeight,
    backgroundColor: '#ecf0f1',
    padding: 8,
  ,

);

孩子

import React,  useState, useEffect  from 'react';
import  TextInput as RnTextInput, StyleSheet, View, Text  from 'react-native';

const styles = StyleSheet.create(
  textInput: 
    padding: 10,
    marginRight: 10,
    marginLeft: 10,
    borderRadius: 50,
  ,
  text: 
    marginLeft: 20,
    marginBottom: 10,
    fontSize: 20,
  ,
);

const TextInput = React.forwardRef((props, ref) => 
  const [text, setText] = useState('');
  return (
    <View>
      props.label && <Text style=styles.text>props.label</Text>
      <RnTextInput
        style=styles.textInput
        value=text
        onChange=(e) => 
          setText(e.target.value);
        
        secureTextEntry=props.secure
        ref=ref
      />
    </View>
  );
);

export default TextInput;

【讨论】:

current.props 对我来说不存在。在我看来,我们的代码是相同的,但我会尝试向您展示我所有的父代码:gist.github.com/ThallyssonKlein/…

以上是关于如何通过 ref 获取 textinput 的文本/值?的主要内容,如果未能解决你的问题,请参考以下文章

kivy 如何在 TextInput 中获取文本?

React Native - 使用 ref 的 TextInput 值(不受控制的组件)

如何在 TextInput 中获取 $ 符号和逗号分隔符?

如何在 Flash 中删除 TextInput 中的特定文本?

在自定义组件中反应原生访问 refs

如何在 React Native 中使用状态从 TextInput 获取值?