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 相关文章推荐
JavaScript 对象的属性和方法4种不同的类型
Mar 19 Javascript
关于js类的定义
Jun 28 Javascript
node.js中的fs.readFile方法使用说明
Dec 15 Javascript
javascript实现简单的鼠标拖动效果实例
Apr 10 Javascript
JavaScript File API文件上传预览
Feb 02 Javascript
解决Angular.Js与Django标签冲突的方案
Dec 20 Javascript
基本DOM节点操作
Jan 17 Javascript
微信小程序实现YDUI的ScrollNav组件
Feb 02 Javascript
JavaScript中arguments和this对象用法分析
Aug 08 Javascript
vue 的点击事件获取当前点击的元素方法
Sep 15 Javascript
深入解析Vue源码实例挂载与编译流程实现思路详解
May 05 Javascript
javascript sort()对数组中的元素进行排序详解
Oct 13 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
浅谈PHP解析URL函数parse_url和parse_str
2014/11/11 PHP
浅谈PHP定义命令空间的几个注意点(推荐)
2016/10/29 PHP
php计数排序算法的实现代码(附四个实例代码)
2020/03/31 PHP
对google个性主页的拖拽效果的js的完整注释[转]
2007/04/10 Javascript
JavaScript中的Function函数
2015/08/27 Javascript
jqGrid中文文档之选项设置
2015/12/02 Javascript
浅谈js之字面量、对象字面量的访问、关键字in的用法
2016/11/20 Javascript
浅谈angular.js跨域post解决方案
2017/08/30 Javascript
Angular中使用MathJax遇到的一些问题
2017/12/15 Javascript
Vue无限滑动周选择日期的组件的示例代码
2018/07/18 Javascript
一个小时快速搭建微信小程序的方法步骤
2019/04/15 Javascript
详解json串反转义(消除反斜杠)
2019/08/12 Javascript
JavaScript页面加载事件实例讲解
2019/09/01 Javascript
js实现选项卡效果
2020/03/07 Javascript
vue-cli3配置favicon.ico和title的流程
2020/10/27 Javascript
vue使用require.context实现动态注册路由
2020/12/25 Vue.js
[57:22]2018DOTA2亚洲邀请赛 4.7总决赛 LGD vs Mineski 第五场
2018/04/10 DOTA
vc6编写python扩展的方法分享
2014/01/17 Python
python求斐波那契数列示例分享
2014/02/14 Python
朴素贝叶斯算法的python实现方法
2014/11/18 Python
python自动化生成IOS的图标
2018/11/13 Python
使用python将mysql数据库的数据转换为json数据的方法
2019/07/01 Python
python获取txt文件词向量过程详解
2019/07/05 Python
Jupyter打开图形界面并画出正弦函数图像实例
2020/04/24 Python
python实现发送QQ邮件(可加附件)
2020/12/23 Python
使用Python获取爱奇艺电视剧弹幕数据的示例代码
2021/01/12 Python
JDK安装目录下有哪些内容
2014/08/25 面试题
计算机专业应届毕业生自荐信
2013/09/26 职场文书
环境工程与管理大学毕业生求职信
2013/10/02 职场文书
校园招聘策划书
2014/01/09 职场文书
知识竞赛拉拉队口号
2014/06/16 职场文书
初中国旗下的演讲稿
2014/08/28 职场文书
技术经济专业求职信
2014/09/03 职场文书
先进个人主要事迹范文
2015/11/04 职场文书
python 模拟在天空中放风筝的示例代码
2021/04/21 Python
Python爬虫框架之Scrapy中Spider的用法
2021/06/28 Python