Nei*_*ble 5 reactjs material-ui jss
我正在使用 React 和 Material-ui,目前我正在做类似下面的代码的事情。
有没有更好的办法?
例如,是否有一个函数允许您访问组件下面的“styles”jss对象中的“props”,该对象最终使用 withStyles() 注入到组件中,而不必执行所有这些丑陋的内联样式?
import React from 'react';
import {
MaterialComponentOne,
MaterialComponentTwo,
MaterialComponentThree,
} from '@material-ui/core';
function MyPureComponent(props) {
return (
<MaterialComponentOne
style={
props.type === 'secondary'
? {
css_property: 'css_value1',
}
: {
css_property: 'css_value2',
}
}
className={props.classes.MaterialComponentOne}
position="static"
>
<MaterialComponentTwo>
<MaterialComponentThree
style={
props.type === 'secondary'
? {
css_property: 'css_value1',
}
: {
css_property: 'css_value2',
}
}
variant="title"
className={props.classes.MaterialComponentThree}
>
{props.title}
</MaterialComponentThree>
</MaterialComponentTwo>
</MaterialComponentOne>
);
}
const styles = {
MaterialComponentOne: {
css_property: 'css_value',
css_property: 'css_value',
},
MaterialComponentTwo: {
css_propery: 'css_value',
},
};
export default withTheme()(withStyles(styles)(MyPureComponent));
Run Code Online (Sandbox Code Playgroud)
谢谢。
您可以使用Material UI 附带的clsx库或类名库来有条件地将类名连接在一起。下面的示例使用 classnames 库显示,您也可以使用 clsx 库来实现相同的结果。
import React from 'react';
import {
MaterialComponentOne,
MaterialComponentTwo,
MaterialComponentThree,
} from '@material-ui/core';
import classNames from "classnames"
function MyPureComponent(props) {
return (
<MaterialComponentOne
position="static"
className={classNames(
props.classes.MaterialComponentOne,
{[props.classes.classOne]: props.type === 'secondary'},
{[props.classes.classTwo]: props.type !== 'secondary'}
)}
>
<MaterialComponentTwo>
<MaterialComponentThree
variant="title"
className={classNames(
props.classes.MaterialComponentThree,
{"props.classes.classOne": props.type === 'secondary'},
{"props.classes.classTwo": props.type !== 'secondary'}
)}
>
{props.title}
</MaterialComponentThree>
</MaterialComponentTwo>
</MaterialComponentOne>
);
}
const styles = {
MaterialComponentOne: {
css_property: 'css_value',
css_property: 'css_value',
},
MaterialComponentTwo: {
css_propery: 'css_value',
},
classOne: {
css_property: 'css_value',
},
classTwo: {
css_property: 'css_value'
}
};
export default withTheme()(withStyles(styles)(MyPureComponent));
Run Code Online (Sandbox Code Playgroud)
该classNames函数接受任意数量的参数,可以是字符串或对象。该参数'foo'是 的缩写{ foo: true}。如果与给定键关联的值是假的,则该键将不会包含在输出中。
classNames('foo', 'bar'); // => 'foo bar'
classNames('foo', { bar: true }); // => 'foo bar'
classNames({ 'foo-bar': true }); // => 'foo-bar'
classNames({ 'foo-bar': false }); // => ''
classNames({ foo: true }, { bar: true }); // => 'foo bar'
classNames({ foo: true, bar: true }); // => 'foo bar'
// lots of arguments of various types
classNames('foo', { bar: true, duck: false }, 'baz', { quux: true }); // => 'foo bar baz quux'
// other falsy values are just ignored
classNames(null, false, 'bar', undefined, 0, 1, { baz: null }, ''); // => 'bar 1'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4997 次 |
| 最近记录: |