首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更改JSS中的样式

更改JSS中的样式
EN

Stack Overflow用户
提问于 2018-04-30 00:49:15
回答 3查看 4.8K关注 0票数 3

我有以下使用JSS的组件:

代码语言:javascript
复制
import React from 'react'
import injectSheet from 'react-jss'

const styles = {
  button: {
    backgroundColor: 'pink',
  }
}

class App extends Component {
    changeStyle = () => {
         styles.button.backgroundColor: 'blue' //this obviously doesn't work
    }
    render() {
        return (
            <div className="App">
                <button className={this.props.classes.button} onClick={this.changeStyle}>Switch user</button>
            </div>
        );
    }
}

这绝对是一个简单的问题。当我点击按钮时,我希望背景会变成“蓝色”,但仅仅分配新的颜色是行不通的。

EN

回答 3

Stack Overflow用户

发布于 2018-04-30 01:01:36

JSS中的条件样式

在JSS中,应该使用一个函数将样式名称(作为字符串)注入到组件中。我假设您正在使用injectSheet将类注入到属性中,只是在您的代码示例中忽略了这一点。injectSheet将注入包含键值对的类对象,比如: styleObjectPropertyName: dynamicInjectedCSSPropertyName,它将把CSS注入页面的头部。

当您尝试在此之后编辑样式对象时,它不是被动的,因此您需要预先准备好CSS样式,并在代码中动态删除或应用它们。

classNames包

您可以使用像classNames这样的简单库来有条件地应用样式,这是我在下面概述的方法。

代码语言:javascript
复制
import React from 'react';
import injectSheet from 'react-jss';

const styles = {
  buttonPink: {
    backgroundColor: 'pink',
  },
  buttonBlue: {
    backgroundColor: 'blue',
  },
};

class App extends Component {
  state = {
    isButtonColorPink: true,
  };

  changeButtonColor = () => {

  }

  render() {
    const { buttonColorPink } = this.state;
    const { classes } = this.props;
    return (
      <div className="App">
        <button className={classNames({ 
          [classes.buttonPink]: isButtonColorPink,
          [classes.buttonBlue]: !isButtonColorPink,
        })} onClick={this.toggleStyle}>Switch user</button>
      </div>
    );
  }
}

export default injectSheet(styles)(App);

或者,您可以只对任何动态样式使用内联样式-类似于按钮内部的style={{ backgroundColor: this.state.buttonColor }},并简单地使用类方法内的thisState更改buttonColor属性。

票数 3
EN

Stack Overflow用户

发布于 2018-04-30 01:01:03

理想的模式是将按钮的颜色存储在状态对象中,然后在您想要更改颜色时更新该状态。

你的问题的一个解决方案是这样的:

代码语言:javascript
复制
import React from 'react'
import injectSheet from 'react-jss'


class App extends Component {

  constructor(props) {
    super(props);
    this.state = {buttonColor: 'pink'};

  }
    changeStyle = (color) => {
      this.setState({
        buttonColor: color
      });
    }

    render() {
        return (
            <div className="App">
                <button className={this.props.classes.button} onClick={ this.changeStyle }>Switch user</button>
            </div>
        );
    }
}
票数 0
EN

Stack Overflow用户

发布于 2018-08-30 02:43:53

使用JSS版本7.1.7+,您可以使用函数值来定义您的样式。

代码语言:javascript
复制
const styles = {
  button: {
    color: data => data.color
  }
}

当您需要更改颜色时,调用sheet prop的update方法:

代码语言:javascript
复制
this.props.sheet.update({
  button: {
    color: 'red',
  }
})

请注意,截至2018年8月,使用函数值的limitations

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50089058

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档