मेरा 2020 का (या 2019) उत्तर
import React, {Component, useRef, useLayoutEffect} from 'react';
import { useDispatch } from 'react-redux';
import { Toast, ToastBody, ToastHeader } from 'reactstrap';
import {WidgetHead} from './WidgetHead';
export const Widget = ({title, toggle, reload, children, width, name}) => {
let myself = useRef(null);
const dispatch = useDispatch();
useLayoutEffect(()=>{
if (myself.current) {
const height = myself.current.clientHeight
dispatch({type:'GRID_WIDGET_HEIGHT', widget:name, height})
}
}, [myself.current, myself.current?myself.current.clientHeight:0])
return (
<Toast innerRef={myself}>
<WidgetHead title={title}
toggle={toggle}
reload={reload} />
<ToastBody>
{children}
</ToastBody>
</Toast>
)
}
यहाँ (WidgetHead) क्या याद आ रही है के लिए अपनी कल्पना का उपयोग करते हैं, reactstrap
कुछ आप NPM पर मिल सकती है: की जगह innerRef
के साथ ref
एक विरासत डोम तत्व के लिए (एक का कहना है कि<div>
)।
का प्रयोग करें या उपयोग करें
अंतिम को परिवर्तनों के लिए समकालिक कहा जाता है
useLayoutEffect
(या useEffect
) दूसरा तर्क
दूसरा तर्क एक सरणी है, और पहले तर्क में फ़ंक्शन को निष्पादित करने से पहले इसकी जांच की जाती है।
मैंनें इस्तेमाल किया
[अपने आप को समवर्ती, अपने आप को। वर्तमान में? अपने आप को समवर्ती। क्लियरहाइट: 0]
क्योंकि रेंडर करने से पहले अपने आप को myself.current.clientHeight
है जो मैं परिवर्तनों के लिए जांचना चाहता हूं।
मैं यहाँ क्या हल कर रहा हूँ (या हल करने की कोशिश कर रहा हूँ)
मैं एक ग्रिड पर विजेट की समस्या को हल कर रहा हूं जो अपनी इच्छा से अपनी ऊंचाई बदलते हैं, और ग्रिड सिस्टम को प्रतिक्रिया के लिए पर्याप्त लोचदार होना चाहिए ( https://github.com/STRML/react-grid-layout )।
setState
स्टेट वैरिएबल को ऊंचाई मान असाइन करने के लिए उपयोग कर सकते हैं ।