如何在不使用 class 的情况下从 TextInput(在 expo 中)获取输入并将其存储为要在另一个函数中调用的变量?

how do you get a input from a TextInput (in expo) and store it as a variable to be recalled in another function without using class?

我正在开发一个非常简单的提醒应用程序,作为使用 React 和 javascript 的介绍。 (我是 javascript 的完全初学者,但有使用 ruby 等语言的经验。)我希望能够从这个 TextInput 组件 (https://docs.expo.io/versions/v37.0.0/react-native/textinput/#content) 获得用户键盘输入,而无需使用一个class。我只想将输入存储为一个变量,并能够在我的代码中的任何其他地方调用它。第二个函数中的 {text} 变量是我要存储第一个函数的输入的地方。 (为糟糕的英语道歉)我尝试 运行 它,它说它找不到变量 'text',即使那是它被分配给的。

function NewReminderScreen({ navigation }) {
  const [value, onChangeText] = React.useState('click to add reminder.')

  return (
    <View style={styles.container}>
      <TextInput
        style={{height: 40, borderColor: 'white', borderWidth: 0, color:'#595959', fontSize:20, marginHorizontal:5}}
        onChangeText={text => onChangeText(text)}
        value = {value}
      />   
);


}

function HomeScreen({ navigation }) {

  return (
    <View style={styles.container}>
      <Text style={styles.buttontext}>{text}</Text>

      <TouchableOpacity
        onPress={() => navigation.navigate('NewReminderScreen')}
        style={styles.plusbutton}>
        <Text style={styles.buttontext}>+</Text>

      </TouchableOpacity>
    </View>
  );
}

你可以尝试在函数外部声明一个变量,并在触发 onChange prop 内部的函数时为其赋值吗?

  let text = '';

  function NewReminderScreen({ navigation }) {
  const [value, onChangeText] = React.useState('click to add reminder.')

  function textChangeHandler(event){
    onChangeText(event.target.value)
     text = event.target.value;
    }

  return (
    <View style={styles.container}>
      <TextInput
        style={{height: 40, borderColor: 'white', borderWidth: 0, color:'#595959', fontSize:20, marginHorizontal:5}}
        onChange={textChangeHandler}
        value = {value}
      />   
);


}

屏幕 1 你可以制作这样的构造函数

function NewReminderScreen({ navigation }) {
     constructor(props){
          super(props)
          this.state = {
          text: ''

          }
       }
  const [value, onChangeText] = React.useState('click to add reminder.')



 return (
    <View style={styles.container}>
      <TextInput
        style={{height: 40, borderColor: 'white', borderWidth: 0, color:'#595959', fontSize:20, marginHorizontal:5}}
        onChangeText={text => this.setState({text})}
        value = {value}
      />   
);


}

将其放入您的按钮点击功能以导航到您的主屏幕

   this.props.navigation.replace('HomeScreen', { 
     text: this.state.text
  })

屏幕 2

渲染后将其放在主屏幕中

    const text = this.props.route.params.text;

然后把它放在容器中你想要的任何地方

 <Text style={styles.buttontext}>{text}</Text>