1. ホーム
  2. javascript

[解決済み] React Nativeのテキストカラーが効かない

2022-02-27 16:18:53

質問

を手に入れました。 Text コンポーネントの中に TouchableOpacity で、varに依存して色を変えたい。

以下は私のコードです。

import React, { Component } from "react";
import { StyleSheet, Text, View, TouchableOpacity } from "react-native";

var flag = false;

export default class MyTest extends Component {
  changeColor() {
    flag = true;
  }

  render() {
    return (
      <View style={styles.container}>
        <TouchableOpacity
          style={{ flex: 1, backgroundColor: "#888888", margin: 20 }}
          onPress={this.changeColor.bind(this)}
        >
          <Text style={[{ color: "blue" }, flag ? { color: "red" } : false]}>
            One
          </Text>
        </TouchableOpacity>
      </View>
    );
  }
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: "center",
    backgroundColor: "#F5FCFF"
  }
});

を使ってみました。 this.state.textColor が、結果が出ない。また、スタイル変数でそれを使おうとしましたが、やはりうまくいきません。

何か思い当たることはありますか?

解決方法は?

その flag 変数はコンポーネントの状態にはないので、変更してもコンポーネントは再レンダリングされません。

代わりにコンポーネントの状態にして、それを setState で動作します。

class MyTest extends Component {
  state = { flag: true };

  changeColor = () => {
    this.setState(previousState => {
      return { flag: !previousState.flag };
    });
  };

  render() {
    return (
      <View style={styles.container}>
        <TouchableOpacity
          style={{ flex: 1, backgroundColor: "#888888", margin: 20 }}
          onPress={this.changeColor}
        >
          <Text style={{ color: this.state.flag ? "red" : "blue" }}>One</Text>
        </TouchableOpacity>
      </View>
    );
  }
}