如何在 React-Native 组件的警报中显示 state

Posted

技术标签:

【中文标题】如何在 React-Native 组件的警报中显示 state【英文标题】:How do I show state in an alert from a React-Native component如何在 React-Native 组件的警报中显示 state 【发布时间】:2019-02-09 20:35:40 【问题描述】:

我在测试时试图提醒我的 TextInput 组件的内容。代码在下面的 handleSubmit() 函数中(第 22 行)。目前,警报弹出,但我得到的只是“标题”,而 this.state.text 没有出现。各种花括号、方括号等我都试过了。

请有人告诉我我做错了什么以及如何在警报中访问我的状态?将来会帮助我进行测试。我是 React Native 的新手,非常感谢在这方面的任何帮助。谢谢vm!

import React, Component from 'react';
import View, Text, TextInput, StyleSheet, TouchableOpacity, Alert from 'react-native';

class GBTextInput extends Component 
  constructor(props) 
    super(props);
    const placeholder, text, label = props;
    this.state = 
      text,
      placeholder,
      label
    ;

    this.handleChange = this.handleChange.bind(this);
    this.handleSubmit = this.handleSubmit.bind(this);
  

  handleChange(event) 
    this.setState(text);
  

  handleSubmit(event) 
    Alert.alert(
      'Title'+this.state.text,
      'I am a message'
    );
    event.preventDefault();
  

  render() 
    const text, placeholder, label = this.state;
    const containerStyle, labelStyle, inputStyle, buttonStyle = styles;

    return(
      <View>
      <View style=containerStyle>
        <View style=labelStyle>
          <Text>label</Text>
        </View>
        <TextInput
          placeholder=placeholder
          style=inputStyle
          onChangeText=(text) => this.handleChange
          value=text
          onSubmitEditing=(text) => this.handleSubmit
        />
      </View>
      <TouchableOpacity style=buttonStyle onPress=this.handleSubmit>
        <Text>PRESS ME</Text>
      </TouchableOpacity>
      </View>

    );

  


const styles= StyleSheet.create (
  containerStyle: 
    flexDirection: 'row',
    margin: 6
  ,
  buttonStyle: 
    alignSelf: 'stretch',
    margin: 6,
    padding: 6,
    height: 40,
    borderRadius: 10,
    alignItems: 'center',
    justifyContent: 'center',
    borderColor: 'blue',
    borderWidth: StyleSheet.hairlineWidth
  ,
  labelStyle: 
    height: 40,
    width: '20%',
    alignItems: 'flex-end',
    justifyContent: 'center',
    paddingRight: 6
  ,
  inputStyle: 
    height: 40,
    width: '80%',
    borderColor: 'gray',
    borderRadius: 10,
    borderWidth: StyleSheet.hairlineWidth,
    position: 'relative',
    paddingLeft: 6
  ,
);

export default GBTextInput;

【问题讨论】:

想想如何设置状态onChangeText。您是否正确处理text?你打电话给event listener 正确吗? 感谢 wlh - 发现问题了! :) 【参考方案1】:

我猜你的问题在这里:

handleChange(event) 
  this.setState(text);

应该是:

handleChange(text) 
  this.setState(text);

您还需要将值传递给 handleChange 函数:

<TextInput
  placeholder=placeholder
  style=inputStyle
  onChangeText=(text) => this.handleChange(text)
  value=text
  onSubmitEditing=(text) => this.handleSubmit
/>

<TextInput
  placeholder=placeholder
  style=inputStyle
  onChangeText=this.handleChange
  value=text
  onSubmitEditing=(text) => this.handleSubmit
/>

现在的方式...每次更改输入文本时,您都将文本设置为未定义。长话短说...您正确地尝试在警报中打印状态值...您只是没有正确设置状态值,因此它始终未定义。

【讨论】:

非常感谢 - 我错误地认为 handleChange 工作正常,因为我的文本在输入中更新,但您的摘要和解决方案是正确的,这解决了我的问题。谢谢。 :)【参考方案2】:

这对我有用:

alert('Title ' + this.state.text);

【讨论】:

以上是关于如何在 React-Native 组件的警报中显示 state的主要内容,如果未能解决你的问题,请参考以下文章

如何在 blazor 组件中显示来自后端的自定义引导警报

dispatch 不调用reducer React Native

用户从 xcode 中的多组件选择器中选择某些值后,如何显示某个消息/警报?

使用 react-native 克隆本机 android 警报屏幕

在 react-native 中显示/隐藏状态更改的组件时出错

有没有办法可以将 Text 组件的全部内容包装在 react-native 中的父视图中?