[英]React: Incorrect Modal component gets rendered called after axios call
[英]Call a function after the modal is rendered
我在 reactstrap Modal 中有一個 div,我想調用我的 function 來獲取這個 div 的屬性(在它被渲染之后)。 我在useEffect
上嘗試過 useEffect,我在那個 div 上嘗試過modalShow
,我試過在 div 中調用 function。
<div
custom-attribute="VALUE"
ref={modalRef}
>
{handleModalLoad()}
</div>
但問題是我的 function 即handleModalLoad()
在呈現模式之前被執行,因此我無法從該屬性中獲取值。
嘗試使自定義 div 成為組件並在內部使用useEffect
將值發送出去。
如果沒有依賴數組, useEffect
只會在該組件渲染時運行。 您可以使用 useRef 獲取該值,並通過useRef
中的回調useEffect
將其發送出去。
如果您還需要在另一個模式中獲取任何屬性值,則可以重用此組件。
示例:(另請查看現場演示: stackblitz )
import React, { useState, useEffect, useRef } from 'react';
export function MyDiv({ handleModalLoad }) {
const myDivRef = useRef(null);
// 👇 only run when this component renders
useEffect(() => {
// 👇 get value from custom attribute
const { customAttribute } = myDivRef.current.dataset;
if (!customAttribute) return;
// 👇 run the function needed
handleModalLoad(customAttribute);
}, []);
return (
<div data-custom-attribute="VALUE" ref={myDivRef}>
<h2>This is my div in modal</h2>
</div>
);
}
export default function App() {
const [modalOpen, setModalOpen] = useState(false);
const [myValue, setMyValue] = useState('');
return (
<>
<div>
<h1>{`Click button to get: ${myValue}`}</h1>
<button onClick={() => setModalOpen(true)}>OPEN MODAL</button>
{modalOpen && <MyDiv handleModalLoad={(value) => setMyValue(value)} />}
</div>
</>
);
}
希望這會有所幫助!
<div
custom-attribute="VALUE"
ref={modalRef}
>
{handleModalLoad()}
</div>
是的,無論最新的ref
值如何,您的 function 都會運行。
做這個
const someRef=useRef(null)
useEffect(()=>{
handleModalLoad()
},[someRef])
{
isModalOpen && <div
custom-attribute="VALUE"
ref={someRef}
>
</div>
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.