Getting DOM node from React child element without ReactDOM.findDOMNode












0















I am wondering how I can find the DOM node of a React child. This question has been asked before, however in every solution I can find (like this one), the accepted answer makes use of ReactDOM.findDOMNode. I don't consider this to be an ideal solution since use of ReactDOM.findDOMNode is discouraged, and it may be deprecated in the future.



If have looked into creating a new ref with React.createRef() from cloneElement, but this doesn't seem to provide a way of accessing getBoundingClientRect() which I require.



ie.



// in constructor
this.childElement = React.createRef();

...

const newChild = React.cloneElement(
childElement,
{ ref: this.childElement }
);


Is there a way of accomplishing this without ReactDOM.findDOMNode?










share|improve this question

























  • Is there something wrong with getting the DOM node of child via <div ref={node => this.node = node} /> for example?

    – Shawn Andrews
    Nov 28 '18 at 3:35











  • In my case, yes. I have a wrapper component which needs to be able to assign a ref to any Component or element passed as props.children.

    – Nicholas Haley
    Nov 28 '18 at 3:39











  • Can you iterate the children and assign a ref to each?

    – Shawn Andrews
    Nov 28 '18 at 3:44











  • In my case the wrapper should only ever take in one child, so I do const childElement = React.Children.only(this.props.children); As shown above, this element is cloned and I try to assign a ref (but obviously the node doesn't seem to work as intended since I cannot call getBoundingClientRect). This should effectively be the same as iterating through and assigning refs.

    – Nicholas Haley
    Nov 28 '18 at 4:01


















0















I am wondering how I can find the DOM node of a React child. This question has been asked before, however in every solution I can find (like this one), the accepted answer makes use of ReactDOM.findDOMNode. I don't consider this to be an ideal solution since use of ReactDOM.findDOMNode is discouraged, and it may be deprecated in the future.



If have looked into creating a new ref with React.createRef() from cloneElement, but this doesn't seem to provide a way of accessing getBoundingClientRect() which I require.



ie.



// in constructor
this.childElement = React.createRef();

...

const newChild = React.cloneElement(
childElement,
{ ref: this.childElement }
);


Is there a way of accomplishing this without ReactDOM.findDOMNode?










share|improve this question

























  • Is there something wrong with getting the DOM node of child via <div ref={node => this.node = node} /> for example?

    – Shawn Andrews
    Nov 28 '18 at 3:35











  • In my case, yes. I have a wrapper component which needs to be able to assign a ref to any Component or element passed as props.children.

    – Nicholas Haley
    Nov 28 '18 at 3:39











  • Can you iterate the children and assign a ref to each?

    – Shawn Andrews
    Nov 28 '18 at 3:44











  • In my case the wrapper should only ever take in one child, so I do const childElement = React.Children.only(this.props.children); As shown above, this element is cloned and I try to assign a ref (but obviously the node doesn't seem to work as intended since I cannot call getBoundingClientRect). This should effectively be the same as iterating through and assigning refs.

    – Nicholas Haley
    Nov 28 '18 at 4:01
















0












0








0








I am wondering how I can find the DOM node of a React child. This question has been asked before, however in every solution I can find (like this one), the accepted answer makes use of ReactDOM.findDOMNode. I don't consider this to be an ideal solution since use of ReactDOM.findDOMNode is discouraged, and it may be deprecated in the future.



If have looked into creating a new ref with React.createRef() from cloneElement, but this doesn't seem to provide a way of accessing getBoundingClientRect() which I require.



ie.



// in constructor
this.childElement = React.createRef();

...

const newChild = React.cloneElement(
childElement,
{ ref: this.childElement }
);


Is there a way of accomplishing this without ReactDOM.findDOMNode?










share|improve this question
















I am wondering how I can find the DOM node of a React child. This question has been asked before, however in every solution I can find (like this one), the accepted answer makes use of ReactDOM.findDOMNode. I don't consider this to be an ideal solution since use of ReactDOM.findDOMNode is discouraged, and it may be deprecated in the future.



If have looked into creating a new ref with React.createRef() from cloneElement, but this doesn't seem to provide a way of accessing getBoundingClientRect() which I require.



ie.



// in constructor
this.childElement = React.createRef();

...

const newChild = React.cloneElement(
childElement,
{ ref: this.childElement }
);


Is there a way of accomplishing this without ReactDOM.findDOMNode?







reactjs react-dom






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 28 '18 at 3:32







Nicholas Haley

















asked Nov 28 '18 at 3:22









Nicholas HaleyNicholas Haley

83021131




83021131













  • Is there something wrong with getting the DOM node of child via <div ref={node => this.node = node} /> for example?

    – Shawn Andrews
    Nov 28 '18 at 3:35











  • In my case, yes. I have a wrapper component which needs to be able to assign a ref to any Component or element passed as props.children.

    – Nicholas Haley
    Nov 28 '18 at 3:39











  • Can you iterate the children and assign a ref to each?

    – Shawn Andrews
    Nov 28 '18 at 3:44











  • In my case the wrapper should only ever take in one child, so I do const childElement = React.Children.only(this.props.children); As shown above, this element is cloned and I try to assign a ref (but obviously the node doesn't seem to work as intended since I cannot call getBoundingClientRect). This should effectively be the same as iterating through and assigning refs.

    – Nicholas Haley
    Nov 28 '18 at 4:01





















  • Is there something wrong with getting the DOM node of child via <div ref={node => this.node = node} /> for example?

    – Shawn Andrews
    Nov 28 '18 at 3:35











  • In my case, yes. I have a wrapper component which needs to be able to assign a ref to any Component or element passed as props.children.

    – Nicholas Haley
    Nov 28 '18 at 3:39











  • Can you iterate the children and assign a ref to each?

    – Shawn Andrews
    Nov 28 '18 at 3:44











  • In my case the wrapper should only ever take in one child, so I do const childElement = React.Children.only(this.props.children); As shown above, this element is cloned and I try to assign a ref (but obviously the node doesn't seem to work as intended since I cannot call getBoundingClientRect). This should effectively be the same as iterating through and assigning refs.

    – Nicholas Haley
    Nov 28 '18 at 4:01



















Is there something wrong with getting the DOM node of child via <div ref={node => this.node = node} /> for example?

– Shawn Andrews
Nov 28 '18 at 3:35





Is there something wrong with getting the DOM node of child via <div ref={node => this.node = node} /> for example?

– Shawn Andrews
Nov 28 '18 at 3:35













In my case, yes. I have a wrapper component which needs to be able to assign a ref to any Component or element passed as props.children.

– Nicholas Haley
Nov 28 '18 at 3:39





In my case, yes. I have a wrapper component which needs to be able to assign a ref to any Component or element passed as props.children.

– Nicholas Haley
Nov 28 '18 at 3:39













Can you iterate the children and assign a ref to each?

– Shawn Andrews
Nov 28 '18 at 3:44





Can you iterate the children and assign a ref to each?

– Shawn Andrews
Nov 28 '18 at 3:44













In my case the wrapper should only ever take in one child, so I do const childElement = React.Children.only(this.props.children); As shown above, this element is cloned and I try to assign a ref (but obviously the node doesn't seem to work as intended since I cannot call getBoundingClientRect). This should effectively be the same as iterating through and assigning refs.

– Nicholas Haley
Nov 28 '18 at 4:01







In my case the wrapper should only ever take in one child, so I do const childElement = React.Children.only(this.props.children); As shown above, this element is cloned and I try to assign a ref (but obviously the node doesn't seem to work as intended since I cannot call getBoundingClientRect). This should effectively be the same as iterating through and assigning refs.

– Nicholas Haley
Nov 28 '18 at 4:01














1 Answer
1






active

oldest

votes


















0














If you assign ref correctly, element becomes accessible at the current attribute of the ref, and you want an element as React.cloneElement first argument is the element.



const newChild = React.cloneElement(
childElement.current,





share|improve this answer























    Your Answer






    StackExchange.ifUsing("editor", function () {
    StackExchange.using("externalEditor", function () {
    StackExchange.using("snippets", function () {
    StackExchange.snippets.init();
    });
    });
    }, "code-snippets");

    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "1"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });














    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53511634%2fgetting-dom-node-from-react-child-element-without-reactdom-finddomnode%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    0














    If you assign ref correctly, element becomes accessible at the current attribute of the ref, and you want an element as React.cloneElement first argument is the element.



    const newChild = React.cloneElement(
    childElement.current,





    share|improve this answer




























      0














      If you assign ref correctly, element becomes accessible at the current attribute of the ref, and you want an element as React.cloneElement first argument is the element.



      const newChild = React.cloneElement(
      childElement.current,





      share|improve this answer


























        0












        0








        0







        If you assign ref correctly, element becomes accessible at the current attribute of the ref, and you want an element as React.cloneElement first argument is the element.



        const newChild = React.cloneElement(
        childElement.current,





        share|improve this answer













        If you assign ref correctly, element becomes accessible at the current attribute of the ref, and you want an element as React.cloneElement first argument is the element.



        const newChild = React.cloneElement(
        childElement.current,






        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Nov 28 '18 at 6:07









        Julius DzidzevičiusJulius Dzidzevičius

        4,88641947




        4,88641947
































            draft saved

            draft discarded




















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53511634%2fgetting-dom-node-from-react-child-element-without-reactdom-finddomnode%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            Lallio

            Unable to find Lightning Node

            Futebolista