web-dev-qa-db-ja.com

Reactネイティブテキストの色が機能しない

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を使用しようとしましたが、結果はありません。私もスタイル変数でそれを使用しようとしましたが、やはり機能しません。

何か案が?

6
MohamadKh75

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>
    );
  }
}
2
Tholle