setStateを使用してTextInputのプレースホルダを変更しようとしています。しかし、これは動作していないようです。React TextInputのネイティブ更新プレースホルダ
render() {
return (
<TextInput
placeholder={this.state.useThisPlaceholder}
/>
);
}
上記のコードをプレースホルダの代わりにvalue属性で試してもうまくいきます。この動作は許可されていないか、何か不足していますか?
ありがとうございます。
更新
constructor() {
super();
this.formSections = {
first:{
fields:['username', 'password', 'confirm password'],
buttonText:'Next',
buttonAction:() => this._loadNext()
},
second:{
fields:['first name', 'last name', 'email'],
buttonText:'Register',
buttonAction:() => alert('registering with the server')
}
}
this.state = {
currentFormSection:'first'
}
}
_loadNext() {
this.setState({
currentFormSection:'second'
});
}
render() {
return (
<View
style={styles.container}
>
<TextInput
placeholder={this.formSections[this.state.currentFormSection].fields[0]}
style={styles.textInput}
underlineColorAndroid="transparent"
placeholderTextColor="rgba(255,255,255,1)"
/>
<TextInput
placeholder={this.formSections[this.state.currentFormSection].fields[1]}
style={styles.textInput}
underlineColorAndroid="transparent"
placeholderTextColor="rgba(255,255,255,1)"
/>
<TextInput
placeholder={this.formSections[this.state.currentFormSection].fields[2]}
style={styles.textInput}
underlineColorAndroid="transparent"
placeholderTextColor="rgba(255,255,255,1)"
/>
<TouchableOpacity
style={styles.formBtn}
onPress={this.formSections[this.state.currentFormSection].buttonAction}
>
<Text style={styles.formBtnText}>
{this.formSections[this.state.currentFormSection].buttonText}
</Text>
</TouchableOpacity>
</View>
);
}
異なるフォームフィールドに同じテキスト入力を使用している何を私がここに実現しようとしています。ここで、プレースホルダは空白に更新されます。 setStateの後、入力フィールドは空白で、値もテキストもありません。しかし、入力に何かを入力してそれをすべて消去すると、更新されたプレースホルダが表示されます。
これは動作します。プレースホルダは、テキストインプットに値が与えられていないときに表示されます。 – Vicky
@Sujan私は自分のコードを投稿しました。また、プレースホルダーを変更する必要がある場合は、必要に応じて試してみることもできます。 –
@DeepakとVicky私はそれが動作するはずだったと思ったが、私のプロジェクトでは奇妙な動作をしている。実際のコードを更新しました。間違っていますか?ありがとうございました。 –