javascript - ReactJS 中的 JQuery 函数用于动态视口(viewport)高度

标签 javascript reactjs

所以我在另一个关于使表格高度等于视口(viewport)高度的问题上得到了一些帮助。这意味着,如果用户调整屏幕大小,表格高度会即时调整以占据屏幕的整个高度。我现在的问题是,这是一个 React 应用程序,我很难将这个 jquery 函数转换为 React。

我的函数如下所示:

$(document).ready(function() {
   function setHeight() {
     windowHeight = $(window).innerHeight();
     $('.dynamicHeight').css('height', windowHeight + 'px');
   };
   setHeight();

   $(window).resize(function() {
     setHeight();
   });
});

这是一个codepen显示行为

这是我正在尝试做的事情的屏幕截图 enter image description here

如何在 React 中构建此函数?我假设它需要一些修改。

提前致谢

注意:这可能看起来像我提出的另一个问题,但它不是重复的。这是与同一问题相关的完全不同的问题。

最佳答案

在组件生命周期中,您应该添加一个 componentDidMount 方法。在该方法中,只需添加一个调整大小处理程序

import React, { Component } from 'react';

class MyComponent extends Component {
    constructor(props){
        super(props);
        this.state = {
            width: $(window).width(),
            height: $(window).height(),
        }
        this.resize = this.resize.bind(this);
    }
    resize(){
        this.setState(() => {
            return {
                width: $(window).width(),
                height: $(window).height()
            }
        });
    }
    componentDidMount(){
        window.addEventListener('resize', this.resize);
    }
    render(){
        return (
            <div>
                <MyComponent width={this.state.width} height={this.state.height} />
            </div>
        )
    }
}

所以它的作用是,当您的组件初始化时,您将状态设置为视口(viewport)的宽度和高度(使用 jQuery)。然后你定义一个方法来更新状态,当你的组件挂载时,你将一个调整大小事件监听器附加到它,并在每次屏幕调整大小时调用调整大小方法。这确保您的状态始终包含视口(viewport)的宽度和高度。然后您可以通过将该状态作为 props 和 boom 传递给您的组件来定义组件的宽度和高度!很好,每次调整屏幕大小时,您的组件都会匹配它。

如果您有任何问题,请告诉我。你可能需要修改它才能让它工作(特别是生命周期事件可能不会像你需要的那样经常更新状态)我只是把它掀起来并没有测试它但理论上这正是你需要的

编辑:只是一个想法,如果你想改变你的组件的样式,我会使用样式对象。所以在子组件中,做这样的事情:

let style = {
    width: this.props.width + 'px',
    height: this.props.height + 'px'
}

当你渲染那个组件时

<ChildComponent style={style} />

关于javascript - ReactJS 中的 JQuery 函数用于动态视口(viewport)高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46346401/

相关文章:

reactjs - TS2339 : Property X does not exist on type '{}'

reactjs - 在 Electron + Create React App 中使用文件系统访问 API 写入文件失败

reactjs - 如何获取 Material UI Icon SVG 路径? react 图标选择器

javascript - Blob URL 上传到 firebase 存储

javascript - 在 Openlayers 3 中只允许一个绘图功能

javascript - 如何将函数分配给 Javascript 对象的属性?

javascript - $x() 函数未在 Chrome 扩展、内容脚本中定义

reactjs - 如何在 redux-sagas 中设置并随后取消多个观察者

javascript - img onclick 不起作用

javascript - 有没有办法使用 h.264 编解码器恢复实时 h264 播放(客户端重新加入)?