使用按钮更改文本的颜色

时间:2017-11-22 04:15:14

标签: reactjs react-native react-native-ios

我正在尝试创建一个简单的React Native应用程序:

  1. 呈现“你好,[名字]!”当用户输入名称(此部分有效)
  2. 更改“Hello,[name]!”按下按钮时的文字颜色。
  3. 关于我应该怎么做的任何想法?

    我给了this一个黑色的初始状态,但这似乎没有做任何事情。

    我想要发生的是在单击红色按钮时触发makeRed,这会将文本变为红色。一旦我开始工作,我将添加更多颜色按钮。

    谢谢!

    请参阅下面的App.js代码。所有其他文件都保持默认状态。

    import React, { Component } from 'react';
    import {
      AppRegistry,
      Platform,
      StyleSheet,
      Text,
      TextInput,
      View,
      Button
    } from 'react-native';
    
    export default class App extends Component<{}> {
      constructor(props) {
        super(props);
        this.state = {
          text: 'World',
          color: 'black'
        };
      }
    
      makeRed = () => {
        this.setState({
          color: 'red'
        });
      }
    
      render() {
        return (
          <View style={styles.container}>
            <Text style={[styles.welcome, {color: undefined}]}>
              Hello, {this.state.text}!
            </Text>
            <TextInput
              style={styles.instructions}
              placeholder="Enter a name here!"
              onChangeText={(text) => this.setState({text})}
            />
            <Button
              title='⬤'
              onPress={this.makeRed}
              color='red'
            />
          </View>
        );
      }
    }
    
    const styles = StyleSheet.create({
      container: {
        flex: 1,
        justifyContent: 'center',
        alignItems: 'center',
        backgroundColor: '#F5FCFF',
      },
      welcome: {
        fontSize: 40,
        textAlign: 'center',
        margin: 10,
      },
      instructions: {
        textAlign: 'center',
        color: '#333333',
        marginBottom: 5,
      },
    });
    

    以下是该应用的屏幕截图供参考: app screenshot

2 个答案:

答案 0 :(得分:1)

您需要做的就是改变这一点:

style={[styles.welcome, {color: undefined}]}

style={[styles.welcome, {color : this.state.color }]}

请检查: WORKING DEMO

答案 1 :(得分:0)

color未以Text组件的样式引用为状态属性。试试这个Text元素:

<Text style={{color: this.state.color, ...styles.welcome}}>
  Hello, {this.state.text}!
</Text>

并且,makeRed需要在构造函数中绑定它的上下文,否则this.setState将是未定义的。像这样(在super(props)下):

this.makeRed = this.makeRed.bind(this)