首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用钩子组件访问Preact中的DOM元素?

如何用钩子组件访问Preact中的DOM元素?
EN

Stack Overflow用户
提问于 2020-01-15 03:46:55
回答 1查看 1.3K关注 0票数 2

我用带钩子的Preact。我有以下按钮组件:

代码语言:javascript
复制
export function Button(props) {
    return (
        <button class={props.class}>{props.children}</button>
    );
}

我有另一个父组件,为了动画目的,我需要访问实际的DOM元素按钮。

代码语言:javascript
复制
export function Parent(props) {
    const buttonElm = useRef(null);

    useEffect(() => {

        console.log(buttonElm.current);

        // Animate button using popmotion or similar
    });

    return (
        <div>
            <Button ref={buttonElm}>Click me to animate</Button>
        </div>
    );
}

然而,存在一个问题。buttonElm.current指向JSX对象,即Button,而不是DOM元素button。我需要buttonElm来指向实际的DOM元素。,我该怎么做?

我应该继续使用buttonElm.current.base属性吗?但这并不是用钩子做的习语。

另外,我有两个问题。

当我在使用<Fragment />.

  • Second,返回多个元素的Preact组件上设置它时,
  1. 是如何表现的?(我可以将组件封装在另一个包装器div中,但这比解决问题更让动画头疼)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-15 03:55:04

您需要将ref作为props传递给您的子组件。通过这样做,buttonElm将指向实际的Button元素。

代码语言:javascript
复制
  export function Button(props) {
        return (
            <button class={props.class} ref={props.buttonElm}>{props.children}</button>
        );
    }

export function Parent(props) {
    const buttonElm = useRef(null);

    useEffect(() => {

        console.log(buttonElm.current);

        // Animate button using popmotion or similar
    });

    return (
        <div>
            <Button buttonElm={buttonElm}>Click me to animate</Button>
        </div>
    );
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59744871

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档