ref not referencing correct item in array









up vote
0
down vote

favorite












This issue probably arises from my lack of understanding of refs.
I have this container that I am rendering from an array.



Lets say it will render 4 containers. Each container will have 3 links. When I hover over the one of the links a clipboard icon becomes visible. Using react-copy-to-clipboard library I copy the contents of the that particular item to the clipboard. However, my issue is that it is only copying the last item of the 4th container instead of the one I hovered over or chose. I feel it might also have to do with the index?



I hope someone can clarify why this is happening and help me find a solution.



 handleMouseEnter = index => 
this.setState(prevState => (
isHovered:
...prevState.isHovered,
[index]: true,
,
ref: this.textRef.current.attributes.label.nodeValue,
));
;


<LinkContainer className="linkContainer">
links.map(( name, path , index) => (
<ul className="styledLinks">
<li
onMouseEnter=() => this.handleMouseEnter(index)
onMouseLeave=() => this.handleMouseLeave(index)
>
<StyledLinks
key=name
ref=this.textRef
value=name
label=path
/>
isHovered[index] && (
<CopyToClipboard
onCopy=this.copy
text=ref
>
<StyledCopyIcon
icon="copy"
className="copyIcon"
copySucces=copySuccess
onClick=this.setCopySuccess
/>
</CopyToClipboard>
)
</li>
</ul>
))
</LinkContainer>









share|improve this question























  • What is ref ? you're setting the copy text to that every time
    – Andy Ray
    Nov 8 at 16:59











  • Sorry, that was not clear enough. I am storing the ref to state based on the onMouseEnter then I am using that this.state.ref to copy as text. That is the incorrect text though, always grabs the same one. @AndyRay
    – rowmna
    Nov 8 at 17:05














up vote
0
down vote

favorite












This issue probably arises from my lack of understanding of refs.
I have this container that I am rendering from an array.



Lets say it will render 4 containers. Each container will have 3 links. When I hover over the one of the links a clipboard icon becomes visible. Using react-copy-to-clipboard library I copy the contents of the that particular item to the clipboard. However, my issue is that it is only copying the last item of the 4th container instead of the one I hovered over or chose. I feel it might also have to do with the index?



I hope someone can clarify why this is happening and help me find a solution.



 handleMouseEnter = index => 
this.setState(prevState => (
isHovered:
...prevState.isHovered,
[index]: true,
,
ref: this.textRef.current.attributes.label.nodeValue,
));
;


<LinkContainer className="linkContainer">
links.map(( name, path , index) => (
<ul className="styledLinks">
<li
onMouseEnter=() => this.handleMouseEnter(index)
onMouseLeave=() => this.handleMouseLeave(index)
>
<StyledLinks
key=name
ref=this.textRef
value=name
label=path
/>
isHovered[index] && (
<CopyToClipboard
onCopy=this.copy
text=ref
>
<StyledCopyIcon
icon="copy"
className="copyIcon"
copySucces=copySuccess
onClick=this.setCopySuccess
/>
</CopyToClipboard>
)
</li>
</ul>
))
</LinkContainer>









share|improve this question























  • What is ref ? you're setting the copy text to that every time
    – Andy Ray
    Nov 8 at 16:59











  • Sorry, that was not clear enough. I am storing the ref to state based on the onMouseEnter then I am using that this.state.ref to copy as text. That is the incorrect text though, always grabs the same one. @AndyRay
    – rowmna
    Nov 8 at 17:05












up vote
0
down vote

favorite









up vote
0
down vote

favorite











This issue probably arises from my lack of understanding of refs.
I have this container that I am rendering from an array.



Lets say it will render 4 containers. Each container will have 3 links. When I hover over the one of the links a clipboard icon becomes visible. Using react-copy-to-clipboard library I copy the contents of the that particular item to the clipboard. However, my issue is that it is only copying the last item of the 4th container instead of the one I hovered over or chose. I feel it might also have to do with the index?



I hope someone can clarify why this is happening and help me find a solution.



 handleMouseEnter = index => 
this.setState(prevState => (
isHovered:
...prevState.isHovered,
[index]: true,
,
ref: this.textRef.current.attributes.label.nodeValue,
));
;


<LinkContainer className="linkContainer">
links.map(( name, path , index) => (
<ul className="styledLinks">
<li
onMouseEnter=() => this.handleMouseEnter(index)
onMouseLeave=() => this.handleMouseLeave(index)
>
<StyledLinks
key=name
ref=this.textRef
value=name
label=path
/>
isHovered[index] && (
<CopyToClipboard
onCopy=this.copy
text=ref
>
<StyledCopyIcon
icon="copy"
className="copyIcon"
copySucces=copySuccess
onClick=this.setCopySuccess
/>
</CopyToClipboard>
)
</li>
</ul>
))
</LinkContainer>









share|improve this question















This issue probably arises from my lack of understanding of refs.
I have this container that I am rendering from an array.



Lets say it will render 4 containers. Each container will have 3 links. When I hover over the one of the links a clipboard icon becomes visible. Using react-copy-to-clipboard library I copy the contents of the that particular item to the clipboard. However, my issue is that it is only copying the last item of the 4th container instead of the one I hovered over or chose. I feel it might also have to do with the index?



I hope someone can clarify why this is happening and help me find a solution.



 handleMouseEnter = index => 
this.setState(prevState => (
isHovered:
...prevState.isHovered,
[index]: true,
,
ref: this.textRef.current.attributes.label.nodeValue,
));
;


<LinkContainer className="linkContainer">
links.map(( name, path , index) => (
<ul className="styledLinks">
<li
onMouseEnter=() => this.handleMouseEnter(index)
onMouseLeave=() => this.handleMouseLeave(index)
>
<StyledLinks
key=name
ref=this.textRef
value=name
label=path
/>
isHovered[index] && (
<CopyToClipboard
onCopy=this.copy
text=ref
>
<StyledCopyIcon
icon="copy"
className="copyIcon"
copySucces=copySuccess
onClick=this.setCopySuccess
/>
</CopyToClipboard>
)
</li>
</ul>
))
</LinkContainer>






javascript arrays reactjs ref






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 8 at 17:04

























asked Nov 8 at 16:49









rowmna

255




255











  • What is ref ? you're setting the copy text to that every time
    – Andy Ray
    Nov 8 at 16:59











  • Sorry, that was not clear enough. I am storing the ref to state based on the onMouseEnter then I am using that this.state.ref to copy as text. That is the incorrect text though, always grabs the same one. @AndyRay
    – rowmna
    Nov 8 at 17:05
















  • What is ref ? you're setting the copy text to that every time
    – Andy Ray
    Nov 8 at 16:59











  • Sorry, that was not clear enough. I am storing the ref to state based on the onMouseEnter then I am using that this.state.ref to copy as text. That is the incorrect text though, always grabs the same one. @AndyRay
    – rowmna
    Nov 8 at 17:05















What is ref ? you're setting the copy text to that every time
– Andy Ray
Nov 8 at 16:59





What is ref ? you're setting the copy text to that every time
– Andy Ray
Nov 8 at 16:59













Sorry, that was not clear enough. I am storing the ref to state based on the onMouseEnter then I am using that this.state.ref to copy as text. That is the incorrect text though, always grabs the same one. @AndyRay
– rowmna
Nov 8 at 17:05




Sorry, that was not clear enough. I am storing the ref to state based on the onMouseEnter then I am using that this.state.ref to copy as text. That is the incorrect text though, always grabs the same one. @AndyRay
– rowmna
Nov 8 at 17:05












1 Answer
1






active

oldest

votes

















up vote
1
down vote



accepted










You always overwrite the same ref in your loop:



ref=this.textRef


So the last loop iteration will overwrite the ref with the last element, and all click handlers will reference that.



You should create an individual ref for each element. There's some suggestions for how to do this on this Github issue.






share|improve this answer




















  • thank you this is very very insightful and helpful!
    – rowmna
    Nov 8 at 17:15










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',
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%2f53212440%2fref-not-referencing-correct-item-in-array%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








up vote
1
down vote



accepted










You always overwrite the same ref in your loop:



ref=this.textRef


So the last loop iteration will overwrite the ref with the last element, and all click handlers will reference that.



You should create an individual ref for each element. There's some suggestions for how to do this on this Github issue.






share|improve this answer




















  • thank you this is very very insightful and helpful!
    – rowmna
    Nov 8 at 17:15














up vote
1
down vote



accepted










You always overwrite the same ref in your loop:



ref=this.textRef


So the last loop iteration will overwrite the ref with the last element, and all click handlers will reference that.



You should create an individual ref for each element. There's some suggestions for how to do this on this Github issue.






share|improve this answer




















  • thank you this is very very insightful and helpful!
    – rowmna
    Nov 8 at 17:15












up vote
1
down vote



accepted







up vote
1
down vote



accepted






You always overwrite the same ref in your loop:



ref=this.textRef


So the last loop iteration will overwrite the ref with the last element, and all click handlers will reference that.



You should create an individual ref for each element. There's some suggestions for how to do this on this Github issue.






share|improve this answer












You always overwrite the same ref in your loop:



ref=this.textRef


So the last loop iteration will overwrite the ref with the last element, and all click handlers will reference that.



You should create an individual ref for each element. There's some suggestions for how to do this on this Github issue.







share|improve this answer












share|improve this answer



share|improve this answer










answered Nov 8 at 17:10









Andy Ray

16.7k66096




16.7k66096











  • thank you this is very very insightful and helpful!
    – rowmna
    Nov 8 at 17:15
















  • thank you this is very very insightful and helpful!
    – rowmna
    Nov 8 at 17:15















thank you this is very very insightful and helpful!
– rowmna
Nov 8 at 17:15




thank you this is very very insightful and helpful!
– rowmna
Nov 8 at 17:15

















 

draft saved


draft discarded















































 


draft saved


draft discarded














StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53212440%2fref-not-referencing-correct-item-in-array%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

𛂒𛀶,𛀽𛀑𛂀𛃧𛂓𛀙𛃆𛃑𛃷𛂟𛁡𛀢𛀟𛁤𛂽𛁕𛁪𛂟𛂯,𛁞𛂧𛀴𛁄𛁠𛁼𛂿𛀤 𛂘,𛁺𛂾𛃭𛃭𛃵𛀺,𛂣𛃍𛂖𛃶 𛀸𛃀𛂖𛁶𛁏𛁚 𛂢𛂞 𛁰𛂆𛀔,𛁸𛀽𛁓𛃋𛂇𛃧𛀧𛃣𛂐𛃇,𛂂𛃻𛃲𛁬𛃞𛀧𛃃𛀅 𛂭𛁠𛁡𛃇𛀷𛃓𛁥,𛁙𛁘𛁞𛃸𛁸𛃣𛁜,𛂛,𛃿,𛁯𛂘𛂌𛃛𛁱𛃌𛂈𛂇 𛁊𛃲,𛀕𛃴𛀜 𛀶𛂆𛀶𛃟𛂉𛀣,𛂐𛁞𛁾 𛁷𛂑𛁳𛂯𛀬𛃅,𛃶𛁼

Edmonton

Crossroads (UK TV series)