javascript - 有条件地渲染到 div 高度
问题描述
在反应中,我仅在其高度不大于外部 div 高度的给定百分比时才尝试渲染内部 div。
我想出了以下解决方案:
Wrapper.js
import React from "react";
import Presentation from "./Presentation"
export default class Wrapper extends React.Component{
constructor(props) {
super(props);
this.state = { percentage: 0 };
this.myRef = React.createRef();
}
componentDidMount(){
this.setState(
{percentage: this.myRef.current.inner.clientHeight/this.myRef.current.outer.clientHeight * 100}
)
}
componentDidUpdate(prevProps, prevState){
const percentage = this.myRef.current.inner.clientHeight/this.myRef.current.outer.clientHeight * 100;
if (prevState.percentage !== this.state.percentage){
this.setState(
{percentage: percentage}
)
}
}
render(){
return <Presentation ref={this.myRef} percentage={this.state.percentage}>abc</Presentation>
}
}
Presentation.js
import React, { useRef, useImperativeHandle, forwardRef } from 'react';
const Presentation = (props, ref) => {
const innerRef = useRef();
const outerRef = useRef();
const inputRef = useRef();
useImperativeHandle(ref, () => ({
get inner(){
return innerRef.current
},
get outer(){
return outerRef.current
}
}));
console.log("percentage presentation: ", props.percentage)
return <div><div ref={outerRef}>Outer<div ref={innerRef}>
<div>Anteil inner: {props.percentage}</div>
{props.percentage <= 50 && <div>50 größer</div>}
</div></div></div>
}
export default forwardRef(Presentation);
不幸的是,它会导致错误;错误:超过最大更新深度。当组件在 componentWillUpdate 或 componentDidUpdate 中重复调用 setState 时,可能会发生这种情况。
调试后我发现出了什么问题(在渲染过程中有一个无限循环),但我不知道如何自己解决它。任何人都可以给我一个更好的解决方案的提示吗?
解决方案
推荐阅读
- visual-studio-code - 如何在 Visual Studio 代码中为 C++ 设置默认代码?
- java - 异常 MyExc3 永远不会在相应的 try 语句的主体中抛出
- python - 无法在python3中导入fasttext库
- ios - 授权用户使用 Firebase 不起作用
- c++11 - 使用一次后释放向量内存?
- database - 如何定义对 json-server 的查询的开始和结束?
- python-3.x - 在 Google Colab 中使用 Keras 和 TPU 丢失会话
- python - 如何将新列表添加到列表底部?
- tcl - Hexapod Tcl 旋转脚本
- tensorflow - 我可以了解一些关于在 Keras 中实现自定义激活功能的细节吗?