更改焦点本机文本输入的状态

时间:2018-11-13 16:49:10

标签: javascript react-native state placeholder

我正在尝试使我的占位符文本在React Native TextInput组件中的onFocus上消失。该函数正在被调用并且状态正在改变,但是占位符仍然存在。这是组件代码:

import React from 'react';
import { View, Text, TextInput, StyleSheet } from 'react-native';

export class GeneralInput extends React.Component {

    constructor(props) {
        super(props);
        this.state = {
            placeholder: this.props.placeholder
        };
     }
    whenInputIsFocused() {
        console.log('Before changing the state');
        this.state.placeholder = "";
        console.log('After changing the state');
        console.log(this.state);
    }
  render() {
    console.log(this.state);
    return(
        <View style={styles.outerContainer}>
            <Text style={styles.labelText}>{this.props.labelText}</Text>
            <TextInput autoCapitalize='none' secureTextEntry={this.props.secureTextEntry} onFocus={this.whenInputIsFocused.bind(this)} underlineColorAndroid="transparent" keyboardType={this.props.type} returnKeyType={this.props.returnKeyType} placeholder={this.state.placeholder} placeholderTextColor='rgba(255, 255, 255, 0.3)' style={styles.inputStyles} />
        </View>
    );
  }
}

这是控制台日志输出:

[09:39:18] Before changing the state
[09:39:18] After changing the state
[09:39:18] Object {
[09:39:18]   "placeholder": "",
[09:39:18] }

为什么即使调用了函数并更新了状态,我的TextInput占位符也不会消失?

1 个答案:

答案 0 :(得分:2)

这是正常行为。如果您输入文本,则占位符将消失,但是您缺少两个重要属性。

<TextInput>
  onChangeText={(text) => this.setState({text})}
  value={this.state.text}
</TextInput>

value设置文本(不是占位符)并将其保留在TextInput中。 onChangeText通过设置状态来更改文本。 开始时,this.state.text应包含空字符串""

编辑:如果要使占位符消失,则需要通过

进行设置

this.setState({placeholder: ""});

使用this.setState()将强制重新渲染。