Material-UI: AppBar => FlatButton 文本如果没有直接定义则无样式
Material-UI: AppBar => FlatButton Text unstyled if not defined directly
好的,我想做的是:我希望我的 AppBar 有一个带有标签 "Login" 的 FlatButton。由于显而易见的原因,此标签应更改为 "Logout"。
现在,当我这样定义 AppBar 时,我得到了正确的样式:
和这样的代码:
let App = React.createClass({
render(){
return(
<div>
<AppBar
title="Foobar"
iconElementRight={<FlatButton>Login</FlatButton>}
/>
<div className="LandingPage">
{this.props.children}
</div>
</div>
);
}
});
但是,这不允许我更改文本。这就是为什么我将 FlatButton 拉出到一个额外的组件中,如下所示:
let UserName = React.createClass({
render(){
return(
<FlatButton>Login</FlatButton>
)
}
});
let App = React.createClass({
render(){
return(
<div>
<AppBar
title="Foobar"
iconElementRight={<UserName />}
/>
<div className="LandingPage">
{this.props.children}
</div>
</div>
);
}
});
我得到的结果是这样的:
那么,我需要做哪些不同的事情?
基于 app-bar.jsx
的 material-ui
源代码,它检查传递的组件的显示名称,然后基于此应用所需的样式。这段代码特别
// app-bar.jsx
if (iconElementRight) {
switch (iconElementRight.type.displayName) {
case 'IconMenu':
case 'IconButton':
iconElementRight = React.cloneElement(iconElementRight, {
iconStyle: this.mergeStyles(styles.iconButton.iconStyle, iconElementRight.props.iconStyle),
});
break;
case 'FlatButton':
iconElementRight = React.cloneElement(iconElementRight, {
style: this.mergeStyles(styles.flatButton, iconElementRight.props.style),
});
break;
}
// ...
您需要做的就是像这样将 FlatButton
添加到您的 UserName
let UserName = React.createClass({
displayName: 'FlatButton',
render() {
return <FlatButton style={this.props.style} >Login</FlatButton>;
},
});
最后,this.props.style
被注入到 UserName
,您需要将其传递给 <FlatButton />
以应用样式。
好的,我想做的是:我希望我的 AppBar 有一个带有标签 "Login" 的 FlatButton。由于显而易见的原因,此标签应更改为 "Logout"。
现在,当我这样定义 AppBar 时,我得到了正确的样式:
和这样的代码:
let App = React.createClass({
render(){
return(
<div>
<AppBar
title="Foobar"
iconElementRight={<FlatButton>Login</FlatButton>}
/>
<div className="LandingPage">
{this.props.children}
</div>
</div>
);
}
});
但是,这不允许我更改文本。这就是为什么我将 FlatButton 拉出到一个额外的组件中,如下所示:
let UserName = React.createClass({
render(){
return(
<FlatButton>Login</FlatButton>
)
}
});
let App = React.createClass({
render(){
return(
<div>
<AppBar
title="Foobar"
iconElementRight={<UserName />}
/>
<div className="LandingPage">
{this.props.children}
</div>
</div>
);
}
});
我得到的结果是这样的:
那么,我需要做哪些不同的事情?
基于 app-bar.jsx
的 material-ui
源代码,它检查传递的组件的显示名称,然后基于此应用所需的样式。这段代码特别
// app-bar.jsx
if (iconElementRight) {
switch (iconElementRight.type.displayName) {
case 'IconMenu':
case 'IconButton':
iconElementRight = React.cloneElement(iconElementRight, {
iconStyle: this.mergeStyles(styles.iconButton.iconStyle, iconElementRight.props.iconStyle),
});
break;
case 'FlatButton':
iconElementRight = React.cloneElement(iconElementRight, {
style: this.mergeStyles(styles.flatButton, iconElementRight.props.style),
});
break;
}
// ...
您需要做的就是像这样将 FlatButton
添加到您的 UserName
let UserName = React.createClass({
displayName: 'FlatButton',
render() {
return <FlatButton style={this.props.style} >Login</FlatButton>;
},
});
最后,this.props.style
被注入到 UserName
,您需要将其传递给 <FlatButton />
以应用样式。