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 基础学习笔记
May 29 Javascript
jQuery学习总结之元素的相对定位和选择器(持续更新)
Apr 26 Javascript
解决jquery submit()提交表单提示:f[s] is not a function
Jan 23 Javascript
关闭浏览器输入框自动补齐 兼容IE,FF,Chrome等主流浏览器
Feb 11 Javascript
jquery实现很酷的网页顶部图标下拉菜单效果
Aug 22 Javascript
jQuery表格插件datatables用法汇总
Mar 29 Javascript
jQuery实现背景弹性滚动的导航效果
Jun 01 Javascript
Bootstrap3 多个模态对话框无法显示的解决方案
Feb 23 Javascript
Angular将填入表单的数据渲染到表格的方法
Sep 22 Javascript
JS脚本实现网页自动秒杀点击
Jan 11 Javascript
node前端模板引擎Jade之标签的基本写法
May 11 Javascript
基于elementUI实现图片预览组件的示例代码
Mar 31 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
追求程序速度,而不是编程的速度
2008/04/23 PHP
php5 apache 2.2 webservice 创建与配置(java)
2011/01/27 PHP
php发送邮件的问题详解
2015/06/22 PHP
laravel 解决多库下的DB::transaction()事务失效问题
2019/10/21 PHP
jQuery 1.7.2中getAll方法的疑惑分析
2012/05/23 Javascript
JS判断元素为数字的奇异写法分享
2012/08/01 Javascript
jQuery阻止事件冒泡具体实现
2013/10/11 Javascript
Nodejs进程管理模块forever详解
2014/06/01 NodeJs
js实现的类似于asp数据字典的数据类型代码实例
2014/09/03 Javascript
AngularJS中取消对HTML片段转义的方法例子
2015/01/04 Javascript
JavaScript 学习笔记之变量及其作用域
2015/01/14 Javascript
jquery+easeing实现仿flash的载入动画
2015/03/10 Javascript
纯js代码制作的网页时钟特效【附实例】
2016/03/30 Javascript
原生js实现弹出层效果
2017/01/20 Javascript
微信小程序之蓝牙的链接
2017/09/26 Javascript
JavaScript继承与聚合实例详解
2019/01/22 Javascript
js 使用ajax设置和获取自定义header信息的方法小结
2020/03/12 Javascript
如何在node环境实现“get数据解析”代码实例
2020/07/03 Javascript
微信小程序绘制半圆(弧形)进度条
2020/11/18 Javascript
python实现绘制树枝简单示例
2014/07/24 Python
Python编程中对文件和存储器的读写示例
2016/01/25 Python
通过5个知识点轻松搞定Python的作用域
2016/09/09 Python
利用python实现xml与数据库读取转换的方法
2017/06/17 Python
python中将字典形式的数据循环插入Excel
2018/01/16 Python
在python中将字符串转为json对象并取值的方法
2018/12/31 Python
Flask框架模板渲染操作简单示例
2019/07/31 Python
Pytorch DataLoader 变长数据处理方式
2020/01/08 Python
Python3和PyCharm安装与环境配置【图文教程】
2020/02/14 Python
pyecharts调整图例与各板块的位置间距实例
2020/05/16 Python
枚举与#define宏的区别
2014/04/30 面试题
高中生期中考试失利检讨书
2014/10/23 职场文书
2014年部门工作总结
2014/11/12 职场文书
2016年三严三实党课学习心得体会
2016/01/06 职场文书
从结婚开始的恋爱故事。小说《我的美好婚事》TV动画化决定
2022/04/07 日漫
vue 自定义的组件绑定点击事件
2022/04/21 Vue.js
kubernetes集群搭建Zabbix监控平台的详细过程
2022/07/07 Servers