我是React和Material UI的新手,所以请耐心等待:P
我想要做的是,有一张卡随着内容的变化动态改变高度。根据文档,这应该是自动发生的,而且确实如此,但我希望高度动画为新值。
所以这是相关的代码:
Access Token : underfined
});
我可以看到,高度会发生变化,但会跳到新值。我希望它能够过渡到#39;到了新的价值。 文档说这可以使用< transitionEnabled'来完成,但我似乎无法让它工作。有人可以帮忙吗?
由于
答案 0 :(得分:5)
所以我找到了一个有效的解决方案。
它比React / Material-UI更像是一个CSS问题。
您必须明确设置卡片两种状态的高度(并且它不能是“自动”)。我做的是,我将高度保存为组件的状态,并在我希望它扩展时更新它(当我更改文本时)。
下面:
getInitialState: function(){
return {
text: 'Test',
height: '10vh'
}
},
componentDidMount: function(){
var self = this;
setInterval(function(){
self.setState({
text: 'Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello ',
height: '15vh'
})
},2000)
},
render: function() {
var cardStyle = {
display: 'block',
width: '80vw',
transitionDuration: '0.3s',
height: this.state.height
}
return (
<div>
<Card style={cardStyle}>
<CardText>
{this.state.text}
</CardText>
</Card>
</div>
);
我很确定这不是最好的方法,所以如果有人知道更好的解决方案,请告诉我。
谢谢:)
答案 1 :(得分:3)
我也遇到了这个问题。我的方法是在外部Card元素上添加onExpandChange事件,从回调方法可以设置可扩展元素的可见性状态。然后你可以在Jake的答案中做[https://stackoverflow.com/a/8331169/3246854]之类的事情来切换和缓和元素。这样做可以让您在可扩展元素上设置自动高度。
唯一的缺点是缓和过渡似乎有一个短暂的延迟,因为过渡是在最大高度而不是实际高度完成的。只要你相应地调整缓出速度,这不是什么大问题。
我在编写本文时使用的是0.14.4版本。
onExpandChange = (x) => {
this.setState({showDetails: x})
}
render() {
var on_show_styles = {maxHeight: "2000px", transition: "max-height 1s ease-in"};
var on_hide_styles = {maxHeight: "0", transition: "max-height 0.15s ease-out", overflow: "hidden"};
return (
<Card onExpandChange={this.onExpandChange}>
<CardHeader
title="I lost my rubber duck"
subtitle="Click here to help me find it"
actAsExpander={true}
showExpandableButton={true}
/>
<CardText style={this.state.showDetails ? on_show_styles : on_hide_styles}>
<div>
<p><b>Description:</b></p>
<p>Here are the details about my rubber duck</p>
</div>
</CardText>
</Card>
)
}
答案 2 :(得分:0)
根据内容更改获取CardText的自动高度,您需要设置溢出:'auto'作为CardText的内联样式,如下所示。
<CardText style={{overflow: ‘auto’}}>
Sample text
</CardText>