Getting DOM node from React child element without ReactDOM.findDOMNode
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
add a comment |
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
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 asprops.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 doconst 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 callgetBoundingClientRect). This should effectively be the same as iterating through and assigning refs.
– Nicholas Haley
Nov 28 '18 at 4:01
add a comment |
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
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
reactjs react-dom
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 asprops.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 doconst 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 callgetBoundingClientRect). This should effectively be the same as iterating through and assigning refs.
– Nicholas Haley
Nov 28 '18 at 4:01
add a comment |
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 asprops.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 doconst 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 callgetBoundingClientRect). 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
add a comment |
1 Answer
1
active
oldest
votes
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,
add a comment |
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
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
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,
add a comment |
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,
add a comment |
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,
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,
answered Nov 28 '18 at 6:07
Julius DzidzevičiusJulius Dzidzevičius
4,88641947
4,88641947
add a comment |
add a comment |
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.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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
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 callgetBoundingClientRect). This should effectively be the same as iterating through and assigning refs.– Nicholas Haley
Nov 28 '18 at 4:01