reactjs - React中div的动画宽度
问题描述
我有一个内容发生变化的 div。每当内容发生变化时,div 应该为其宽度设置动画。我尝试了以下方法,但它不起作用。任何指针都会有所帮助。
class App extends React.Component {
constructor() {
super();
this.state = {
text: 'Hello world'
}
}
changeText() {
this.setState({
text: 'Very long text stretching across screen'
});
}
render() {
return <div>
<div className="text">{this.state.text}</div>
<button onClick={this.changeText.bind(this)}>Change</button>
</div>;
}
}
ReactDOM.render( < App / > , document.getElementById('root'));
.text {
display: inline-block;
background-color: cyan;
transition: width 2000s;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<div id="root"></div>
解决方案
我可以这样做:
class App extends React.Component {
constructor() {
super();
this.state = {
text: 'Hello world'
}
this.myRef = React.createRef();
}
changeText() {
this.setState({
text: 'Very long text stretching across screen'
});
this.myRef.current.style.width = '250px';
}
render() {
return <div>
<div ref={this.myRef} className="text">{this.state.text}</div>
<button onClick={this.changeText.bind(this)}>Change</button>
</div>;
}
}
ReactDOM.render( < App / > , document.getElementById('root'));
.text {
display: inline-block;
background-color: cyan;
overflow: hidden;
height: 18px;
width: 80px;
transition: width 1.5s;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<div id="root"></div>
推荐阅读
- f# - F# 区分联合大小写到字符串的缓慢转换
- node.js - Sequelize:如何计算对象并更新排名?
- c++ - C++ protobuf 序列化数据
- vue.js - 第二次点击后道具不影响孩子
- javascript - 当我想“开始承诺”时
- corda - 在 Corda 中,模式不能转换为 net.corda.core.schemas.MappedSchema 异常
- marklogic - Marklogic如何在抛出捕获异常后继续循环
- arrays - bash 将数组拆分为具有动态名称的单独文件
- c# - 遍历 DataTable 中每行的每个值并比较该值
- python - BitMEX 熊猫数据帧到 nd 数组