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 相关文章推荐
JS日历 推荐
Dec 03 Javascript
JS效率个人经验谈(8-15更新),加入range技巧
Jan 09 Javascript
javascript 文本框水印/占位符(watermark/placeholder)实现方法
Jan 15 Javascript
js传中文参数controller里获取参数乱码问题解决方法
Jan 03 Javascript
javascript实现数字验证码的简单实例
Feb 10 Javascript
jQuery实现列表的全选功能
Mar 18 Javascript
JS表单验证方法实例小结【电话、身份证号、Email、中文、特殊字符、身份证号等】
Feb 14 Javascript
JS设计模式之观察者模式实现实时改变页面中金额数的方法
Feb 05 Javascript
在 Typescript 中使用可被复用的 Vue Mixin功能
Apr 17 Javascript
vue-cli项目中使用echarts图表实例
Oct 22 Javascript
vue 使用高德地图vue-amap组件过程解析
Sep 07 Javascript
vue 使用饿了么UI仿写teambition的筛选功能
Mar 01 Vue.js
详解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
mysql 搜索之简单应用
2007/04/27 PHP
php利用scws实现mysql全文搜索功能的方法
2014/12/25 PHP
php抽象类和接口知识点整理总结
2019/08/02 PHP
laravel框架实现去掉URL中index.php的方法
2019/10/12 PHP
JavaScript的面向对象(一)
2006/11/09 Javascript
DHTML Slide Show script图片轮换
2008/03/03 Javascript
用jquery与css打造个性化的单选框和复选框
2010/10/20 Javascript
关于JavaScript中string 的replace
2013/04/12 Javascript
利用js的Node遍历找到repeater的一个字段实例介绍
2013/04/25 Javascript
jQuery链使用指南
2015/01/20 Javascript
纯css实现窗户玻璃雨滴逼真效果
2015/08/23 Javascript
JavaScript入门系列之知识点总结
2016/03/24 Javascript
NodeJS连接MongoDB数据库时报错的快速解决方法
2016/05/13 NodeJs
BootStrap+Mybatis框架下实现表单提交数据重复验证
2017/03/23 Javascript
Javascript 实现匿名递归的实例代码
2017/05/25 Javascript
jQuery AJAX与jQuery事件的分析讲解
2019/02/18 jQuery
js/jquery遍历对象和数组的方法分析【forEach,map与each方法】
2019/02/27 jQuery
vuex入门最详细整理
2020/03/04 Javascript
详解vue-template-admin三级路由无法缓存的解决方案
2020/03/10 Javascript
Vue实现手机计算器
2020/08/17 Javascript
Python实现多行注释的另类方法
2014/08/22 Python
python实现无证书加密解密实例
2014/10/27 Python
Python中使用logging模块打印log日志详解
2015/04/05 Python
Python实现堆排序的方法详解
2016/05/03 Python
python面试题之列表声明实例分析
2019/07/08 Python
python函数参数(必须参数、可变参数、关键字参数)
2019/08/16 Python
tensorflow入门:tfrecord 和tf.data.TFRecordDataset的使用
2020/01/20 Python
CSS3 三维变形实现立体方块特效源码
2016/12/15 HTML / CSS
canvas像素画板的实现代码
2018/11/21 HTML / CSS
办公室内勤工作职责
2013/12/11 职场文书
重阳节登山活动方案
2014/02/03 职场文书
邮政竞聘演讲稿
2014/09/03 职场文书
乡镇务虚会发言材料
2014/10/20 职场文书
酒店仓管员岗位职责
2015/04/01 职场文书
详解CocosCreator项目结构机制
2021/04/14 Javascript
Netty客户端接入流程NioSocketChannel创建解析
2022/03/25 Java/Android