在React中,你可以清楚地创建一个对象,并将其赋值为内联样式。即. .下面所提到的。
var divStyle = {
color: 'white',
backgroundImage: 'url(' + imgUrl + ')',
WebkitTransition: 'all', // note the capital 'W' here
msTransition: 'all' // 'ms' is the only lowercase vendor prefix
};
var divStyle2 = {fontSize: '18px'};
React.render(<div style={divStyle}>Hello World!</div>, mountNode);
如何组合多个对象并将它们分配在一起?
为了扩展@PythonIsGreat所说的内容,我创建了一个全局函数来为我做这件事:
var css = function(){
var args = $.merge([true, {}], Array.prototype.splice.call(arguments, 0));
return $.extend.apply(null, args);
}
这将对象深度扩展为一个新对象,并允许使用可变数量的对象作为参数。这允许你做这样的事情:
return(
<div style={css(styles.base, styles.first, styles.second,...)} ></div>
);
var styles = {
base:{
//whatever
},
first:{
//whatever
},
second:{
//whatever
}
}
与React Native不同,我们不能在React中传递样式数组,比如
<View style={[style1, style2]} />
在React中,我们需要在将其传递给style属性之前创建单个样式对象。如:
const Header = (props) => {
let baseStyle = {
color: 'red',
}
let enhancedStyle = {
fontSize: '38px'
}
return(
<h1 style={{...baseStyle, ...enhancedStyle}}>{props.title}</h1>
);
}
我们使用ES6 Spread运算符来组合两种风格。你也可以使用Object.assign()来达到同样的目的。
如果你不需要将你的样式存储在一个变量中,这也可以工作
<Segment style={{...segmentStyle, ...{height:'100%'}}}>
Your content
</Segment>
Object.assign()是一个简单的解决方案,但是(目前)最常用的答案使用它——虽然用于制作无状态组件还不错,但会导致OP合并两个状态对象的理想目标出现问题。
有了两个参数,object .assign()实际上会原地改变第一个对象,从而影响未来的实例化。
Ex:
考虑一个盒子的两种可能的样式配置:
var styles = {
box: {backgroundColor: 'yellow', height: '100px', width: '200px'},
boxA: {backgroundColor: 'blue'},
};
所以我们希望所有的盒子都有默认的“box”样式,但想用不同的颜色覆盖一些:
// this will be yellow
<div style={styles.box}></div>
// this will be blue
<div style={Object.assign(styles.box, styles.boxA)}></div>
// this SHOULD be yellow, but it's blue.
<div style={styles.box}></div>
一旦Object.assign()执行,` styles. assign()Box的对象被永久更改。
解决方案是将一个空对象传递给object .assign()。这样做是在告诉该方法用传递给它的对象生成一个NEW对象。像这样:
// this will be yellow
<div style={styles.box}></div>
// this will be blue
<div style={Object.assign({}, styles.box, styles.boxA)}></div>
// a beautiful yellow
<div style={styles.box}></div>
对象在原地发生变化的概念对React至关重要,正确使用Object.assign()对于使用Redux等库非常有帮助。