React根据宽度自适应高度的示例代码


Posted in Javascript onOctober 11, 2017

有时对于响应式布局,我们需要根据组件的宽度自适应高度。CSS无法实现这种动态变化,传统是用jQuery实现。

而在React中无需依赖于JQuery,实现相对比较简单,只要在DidMount后更改width即可

Try on Codepen

需要注意的是在resize时候也要同步变更,需要注册个监听器

class Card extends React.Component {
 constructor(props) {
  super(props);
  this.state = {
   width: props.width || -1,
   height: props.height || -1,
  }
 }

 componentDidMount() {
  this.updateSize();
  window.addEventListener('resize', () => this.updateSize());
 }

 componentWillUnmount() {
  window.removeEventListener('resize', () => this.updateSize());
 }

 updateSize() {
  try {
   const parentDom = ReactDOM.findDOMNode(this).parentNode;
   let { width, height } = this.props;
   //如果props没有指定height和width就自适应
   if (!width) {
    width = parentDom.offsetWidth;
   }
   if (!height) {
    height = width * 0.38;
   }
   this.setState({ width, height });
  } catch (ignore) {
  }
 }

 render() {
  return (
   <div className="test" style={ { width: this.state.width, height: this.state.height } }>
    {`${this.state.width} x ${this.state.height}`}
   </div>
  );
 }
}

ReactDOM.render(
 <Card/>,
 document.getElementById('root')
);

参考资料

React根据宽度自适应高度的示例代码

React生命周期

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JQuery通过Ajax提交表单并返回结果
Jul 31 Javascript
json数据的列循环示例
Sep 06 Javascript
现如今最流行的JavaScript代码规范
Mar 08 Javascript
js实现每日自动换一张图片的方法
May 04 Javascript
js实现打地鼠小游戏
Feb 13 Javascript
利用JQUERY实现多个AJAX请求等待的实例
Dec 14 jQuery
Angular实现的日程表功能【可添加及隐藏显示内容】
Dec 27 Javascript
vue中使用微信公众号js-sdk踩坑记录
Mar 29 Javascript
详解Vue 全局变量,局部变量
Apr 17 Javascript
vue使用微信JS-SDK实现分享功能
Aug 23 Javascript
Vue的transition-group与Virtual Dom Diff算法的使用
Dec 09 Javascript
vue动态设置页面title的方法实例
Aug 23 Javascript
详解vue中使用express+fetch获取本地json文件
Oct 10 #Javascript
vue router自动判断左右翻页转场动画效果
Oct 10 #Javascript
angular2 ng2 @input和@output理解及示例
Oct 10 #Javascript
ionic选择多张图片上传的示例代码
Oct 10 #Javascript
详解ionic本地相册、拍照、裁剪、上传(单图完全版)
Oct 10 #Javascript
防止页面url缓存中ajax中post请求的处理方法
Oct 10 #Javascript
Vue实现数字输入框中分割手机号码的示例
Oct 10 #Javascript
You might like
Syphon 秘笈
2021/03/03 冲泡冲煮
PHP中file_exists函数不支持中文名的解决方法
2014/07/26 PHP
PHP比你想象的好得多
2014/11/27 PHP
php使用pdo连接mssql server数据库实例
2014/12/25 PHP
php 微信公众平台开发模式实现多客服的实例代码
2016/11/07 PHP
PHP 计算至少是其他数字两倍的最大数的实现代码
2020/05/26 PHP
jQuery新闻滚动插件 jquery.roller.js
2011/06/27 Javascript
js中哈希表的几种用法总结
2014/01/28 Javascript
Javascript加载速度慢的解决方案
2014/03/11 Javascript
JS基于面向对象实现的拖拽功能示例
2016/12/20 Javascript
关于AngularJs数据的本地存储详解
2017/01/20 Javascript
node.js爬虫爬取拉勾网职位信息
2017/03/14 Javascript
vue.js实例对象+组件树的详细介绍
2017/10/20 Javascript
JS基于递归实现网页版计算器的方法分析
2017/12/20 Javascript
javaScript动态添加Li元素的实例
2018/02/24 Javascript
js+canvas实现滑动拼图验证码功能
2018/03/26 Javascript
validform表单验证的实现方法
2019/03/08 Javascript
vue-cli3 取消eslint校验代码的解决办法
2020/01/16 Javascript
[01:59]深扒TI7聊天轮盘语音出处 1
2017/05/11 DOTA
Python实现输出程序执行进度百分比的方法
2017/09/16 Python
python+selenium 定位到元素,无法点击的解决方法
2019/01/30 Python
Python中使用socks5设置全局代理的方法示例
2020/04/15 Python
python可迭代对象去重实例
2020/05/15 Python
python 使用tkinter+you-get实现视频下载器
2020/11/17 Python
Canvas实现放大镜效果完整案例分析(附代码)
2020/11/26 HTML / CSS
Pure Collection美国官网:来自英国羊绒专家的奢华羊绒
2017/11/19 全球购物
如何在Oracle中查看各个表、表空间占用空间的大小
2015/10/31 面试题
Linux不知道文件后缀名怎么判断文件类型
2012/04/26 面试题
学生周末回家住宿长期请假条
2014/02/15 职场文书
我们的节日清明节活动总结
2014/04/30 职场文书
庆祝教师节演讲稿
2014/09/03 职场文书
大学四年个人总结
2015/03/03 职场文书
答辩状格式范本
2015/05/22 职场文书
学习心理学心得体会
2016/01/22 职场文书
2016银行求职自荐信
2016/01/28 职场文书
学长教您写论文:经验总结
2019/07/09 职场文书