我有一个div内的反动带模式,我想调用我的函数,抓住这个div的属性(在它已被渲染)。我在modalShow
上尝试了modalShow
,在div上尝试了useRef,我尝试在div中调用函数。
<div
custom-attribute="VALUE"
ref={modalRef}
>
{handleModalLoad()}
</div>
但问题是,我的函数,即handleModalLoad()
,是在呈现模型之前执行的,因此我无法从该属性获取值。
发布于 2022-11-17 22:11:53
尝试使自定义div成为一个组件,并在其中使用useEffect
将值发送出去。
没有依赖数组,useEffect
将只在此组件呈现时运行。您可以使用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>
</>
);
}
希望这能帮上忙!
发布于 2022-11-17 22:26:17
<div
custom-attribute="VALUE"
ref={modalRef}
>
{handleModalLoad()}
</div>
是的,通过这种方式,不管最新的ref
值如何,您的函数都将运行。
执行此操作
const someRef=useRef(null)
useEffect(()=>{
handleModalLoad()
},[someRef])
{
isModalOpen && <div
custom-attribute="VALUE"
ref={someRef}
>
</div>
}
https://stackoverflow.com/questions/74485410
复制