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实现textarea输入框限制字数的方法
Jan 15 Javascript
js实现绿白相间竖向网页百叶窗动画切换效果
Mar 02 Javascript
JS 对象(Object)和字符串(String)互转方法
May 20 Javascript
深入理解jquery中的事件与动画
May 24 Javascript
JS及PHP代码编写八大排序算法
Jul 12 Javascript
详解Vue使用命令行搭建单页面应用
May 24 Javascript
详解create-react-app 自定义 eslint 配置
Jun 07 Javascript
JavaScript指定断点操作实例教程
Sep 18 Javascript
vue使用原生js实现滚动页面跟踪导航高亮的示例代码
Oct 25 Javascript
vue-cli 构建骨架屏的方法示例
Nov 08 Javascript
Vue源码解析之Template转化为AST的实现方法
Dec 14 Javascript
ES6中的类(Class)示例详解
Dec 09 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
JSON在PHP中的应用介绍
2012/09/08 PHP
使用PHP编写的SVN类
2013/07/18 PHP
PHP中执行MYSQL事务解决数据写入不完整等情况
2014/01/07 PHP
YII路径的用法总结
2014/07/09 PHP
php获得文件大小和文件创建时间的方法
2015/03/13 PHP
laravel框架的安装与路由实例分析
2019/10/11 PHP
JavaScript静态的动态
2006/09/18 Javascript
鼠标滚轮改变图片大小的示例代码
2013/11/20 Javascript
javascript实现仿IE顶部的可关闭警告条
2015/05/05 Javascript
jquery 中ajax执行的优先级
2015/06/22 Javascript
理解javascript中的严格模式
2016/02/01 Javascript
详解jQuery插件开发方式
2016/11/22 Javascript
jQuery.Validate表单验证插件的使用示例详解
2017/01/04 Javascript
jquery实现多次上传同一张图片
2017/01/09 Javascript
jQuery使用ajax_动力节点Java学院整理
2017/07/05 jQuery
JavaScript继承与聚合实例详解
2019/01/22 Javascript
layer.js open 隐藏滚动条的例子
2019/09/05 Javascript
微信小程序跳转到其他网页(外部链接)的实现方法
2019/09/20 Javascript
vue实现百度语音合成的实例讲解
2019/10/14 Javascript
JavaScript定时器常见用法实例分析
2019/11/15 Javascript
vue或react项目生产环境去掉console.log的操作
2020/09/02 Javascript
[01:38]2018DOTA2亚洲邀请赛主赛事第二日现场采访 神秘商人痛陈生计不易
2018/04/05 DOTA
用Python输出一个杨辉三角的例子
2014/06/13 Python
解析Mac OS下部署Pyhton的Django框架项目的过程
2016/05/03 Python
python 地图经纬度转换、纠偏的实例代码
2018/08/06 Python
python实现一个简单的ping工具方法
2019/01/31 Python
Python爬虫获取op.gg英雄联盟英雄对位胜率的源码
2021/01/29 Python
美国存储和组织商店:The Container Store
2017/08/16 全球购物
介绍一下linux文件系统分配策略
2013/02/25 面试题
求职简历中个人的自我评价
2013/12/01 职场文书
股东协议书范本
2014/04/14 职场文书
2014年个人工作总结报告
2014/11/27 职场文书
合理化建议书
2015/02/04 职场文书
技术支持岗位职责
2015/02/13 职场文书
好员工观后感
2015/06/17 职场文书
品牌形象定位,全面分析
2019/07/23 职场文书