React JSS hover 函数值
React JSS hover function value
我正在尝试在带有 JSS 的 React 组件中使用悬停样式的函数值(我正在使用 styled-jss 库)。我只希望在 'edited' 属性为真时应用悬停样式。目前对于悬停部分我有这个:
'&:hover': {
background: props => props.edited && 'purple',
cursor: props => props.edited && 'pointer',
...
}
这工作正常,但如您所见,我必须对每个悬停 CSS 值进行函数值检查。我只想在开始时检查一次,return 对象是否为真:
'&:hover': props => props.edited && {
background: 'purple',
cursor: 'pointer',
...
}
但是这种语法或类似的东西似乎不受支持,而且我在任何地方都找不到这方面的任何示例。有没有简单的方法可以做到这一点?还是我只需要对悬停对象中的每个 属性 进行函数值检查?
编辑:
这是我的样式化组件及其 JSS 以及我如何使用它们的基本通用示例:
/* 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'
}
})
};
然后在我的反应组件中:
import { Style } from './style';
class Settings extends Component {
render() {
return(
<Style.UpdateButton/>
);
}
}
);
您可以将函数提取到组件外部,然后像这样进行解构 -
const getHoverStyles = (edited) => edited ? { color: 'red' } : {};
const styles = {
'&:hover': {...getHoverStyles(props.edited)}
}
PS:一个更好的选择是拥有一个像 jss
或 styled-components
或 aphrodite
这样的 css-in-js 库,然后使用它们来以声明方式为您的组件定义 className
或内联样式。
希望这对您有所帮助!
更新 -
我总是更喜欢我的样式而不是知道组件的道具或状态。样式应该只与主题、间距、版式等有关。所以我会定义 2 类 然后有条件地应用
<Button className={props.someProp ? class1 : class2} />
更好的解决方案是使用 props 创建更具声明性的 Button。这意味着你会根据某些条件在 Button 上使用不同的道具 -
<Button primary={!prop.edited} /> or {!prop.edited && <PrimaryButton/>}
<Button secondary={prop.edited} /> or {prop.edited && <SecondaryButton/>}
当前嵌套函数规则有一个错误https://github.com/cssinjs/jss/issues/682
我正在尝试在带有 JSS 的 React 组件中使用悬停样式的函数值(我正在使用 styled-jss 库)。我只希望在 'edited' 属性为真时应用悬停样式。目前对于悬停部分我有这个:
'&:hover': {
background: props => props.edited && 'purple',
cursor: props => props.edited && 'pointer',
...
}
这工作正常,但如您所见,我必须对每个悬停 CSS 值进行函数值检查。我只想在开始时检查一次,return 对象是否为真:
'&:hover': props => props.edited && {
background: 'purple',
cursor: 'pointer',
...
}
但是这种语法或类似的东西似乎不受支持,而且我在任何地方都找不到这方面的任何示例。有没有简单的方法可以做到这一点?还是我只需要对悬停对象中的每个 属性 进行函数值检查?
编辑:
这是我的样式化组件及其 JSS 以及我如何使用它们的基本通用示例:
/* 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'
}
})
};
然后在我的反应组件中:
import { Style } from './style';
class Settings extends Component {
render() {
return(
<Style.UpdateButton/>
);
}
}
);
您可以将函数提取到组件外部,然后像这样进行解构 -
const getHoverStyles = (edited) => edited ? { color: 'red' } : {};
const styles = {
'&:hover': {...getHoverStyles(props.edited)}
}
PS:一个更好的选择是拥有一个像 jss
或 styled-components
或 aphrodite
这样的 css-in-js 库,然后使用它们来以声明方式为您的组件定义 className
或内联样式。
希望这对您有所帮助!
更新 -
我总是更喜欢我的样式而不是知道组件的道具或状态。样式应该只与主题、间距、版式等有关。所以我会定义 2 类 然后有条件地应用
<Button className={props.someProp ? class1 : class2} />
更好的解决方案是使用 props 创建更具声明性的 Button。这意味着你会根据某些条件在 Button 上使用不同的道具 -
<Button primary={!prop.edited} /> or {!prop.edited && <PrimaryButton/>}
<Button secondary={prop.edited} /> or {prop.edited && <SecondaryButton/>}
当前嵌套函数规则有一个错误https://github.com/cssinjs/jss/issues/682