首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >响应JSS悬停函数值

响应JSS悬停函数值
EN

Stack Overflow用户
提问于 2018-04-05 14:32:11
回答 2查看 2.5K关注 0票数 1

我正在尝试使用一个函数值,用于使用JSS的react组件中的悬停样式(我使用的是styled jss库)。我只希望在“编辑”道具为真时应用悬停样式。目前,对于悬停部分,我有以下内容:

代码语言:javascript
复制
'&:hover': {
    background: props => props.edited && 'purple',
    cursor: props => props.edited && 'pointer',
    ...
}

这很好,但是正如您所看到的,我必须对每个悬停CSS值进行函数值检查。我只想在开始时做一次检查,如果是真的话返回对象:

代码语言:javascript
复制
'&:hover': props => props.edited && {
    background: 'purple',
    cursor: 'pointer',
    ...
}

但这种语法或类似的东西似乎不受支持,我在任何地方都找不到这方面的任何例子。有什么简单的方法吗?或者,我是否只需要对悬浮对象中的每个属性进行函数值检查?

编辑:

下面是我的样式组件及其JSS的基本通用示例,以及我如何使用它们:

代码语言:javascript
复制
/* style.js */
import styled from 'styled-jss';
const div = styled('div');

export const Style = {
    UpdateButton: div({
        color: props => !props.edited && 'grey',
        width: '200px',
        '&:hover': {
            background: props => props.edited && 'purple',
            cursor: props => props.edited && 'pointer'
        }
    })
};

然后在我的反应部分:

代码语言:javascript
复制
import { Style } from './style';

class Settings extends Component {
        render() {
            return(
                <Style.UpdateButton/>
            );
        }
    }
);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-04-05 15:48:51

目前,嵌套函数规则有一个错误https://github.com/cssinjs/jss/issues/682

票数 1
EN

Stack Overflow用户

发布于 2018-04-05 14:39:35

你可以把你的函数提取到你的组件之外,然后就像-

代码语言:javascript
复制
const getHoverStyles = (edited) => edited ? { color: 'red' } : {};

const styles = {
'&:hover': {...getHoverStyles(props.edited)}
} 

PS:一个更好的选择是拥有一个css in js库,比如jssstyled-componentsaphrodite,然后使用它们来声明性地定义组件的className或内联样式。

希望这能帮上忙!

更新-

我总是喜欢我的风格,而不知道道具或组件的状态。样式应该只关注主题、间距、排版等,所以我会先定义两个类,然后有条件地应用。

代码语言:javascript
复制
<Button className={props.someProp ? class1 : class2} />

一个更好的解决方案是使用道具创建更多的声明性按钮。这意味着你会有不同的道具在按钮上根据某些条件-

代码语言:javascript
复制
  <Button primary={!prop.edited} />  or {!prop.edited && <PrimaryButton/>}
  <Button secondary={prop.edited} /> or {prop.edited && <SecondaryButton/>}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49674968

复制
相关文章

相似问题

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