React - prevstate issues, getting back old value









up vote
0
down vote

favorite












I have an SVG map with paths, and those paths change colors when I hover over them.
It changes state of specific section, for example my state looks like that:



 POL3139: 
color: '#fbb9c5'
,


I am trying to switch back to the base color after I leave the path.
Here I am changing



onHover = (event) => 
event.stopPropagation();
const e = event.target.id
this.setState(prevState => (
[e]:
...prevState,
color: '#650df9'
,
));




It totally works and changes my color to the picked one.
But then I am trying to revert back to the original one.



I tried that by making a base color in the state:



 POL3139: 
color: '#fbb9c5',
base: '#fbb9c5'
,


and then onMouseLeave:



onLeave = (event) => 
event.stopPropagation();
const e = event.target.id;
this.setState(prevState => (
[e]:
...prevState,
// color: prevState.base - doesn't work
// color: prevState.[e].base - doesn't work
// color: [prevState.e.base] - doesn't work
color: 'pink'

));




I was trying many possible solutions but I can't get it to work.
I am still learning react and it might be an easy one but I can't figure it out.










share|improve this question





















  • What does prevState.base represent when the updater is called?
    – Jorjon
    Nov 10 at 19:40














up vote
0
down vote

favorite












I have an SVG map with paths, and those paths change colors when I hover over them.
It changes state of specific section, for example my state looks like that:



 POL3139: 
color: '#fbb9c5'
,


I am trying to switch back to the base color after I leave the path.
Here I am changing



onHover = (event) => 
event.stopPropagation();
const e = event.target.id
this.setState(prevState => (
[e]:
...prevState,
color: '#650df9'
,
));




It totally works and changes my color to the picked one.
But then I am trying to revert back to the original one.



I tried that by making a base color in the state:



 POL3139: 
color: '#fbb9c5',
base: '#fbb9c5'
,


and then onMouseLeave:



onLeave = (event) => 
event.stopPropagation();
const e = event.target.id;
this.setState(prevState => (
[e]:
...prevState,
// color: prevState.base - doesn't work
// color: prevState.[e].base - doesn't work
// color: [prevState.e.base] - doesn't work
color: 'pink'

));




I was trying many possible solutions but I can't get it to work.
I am still learning react and it might be an easy one but I can't figure it out.










share|improve this question





















  • What does prevState.base represent when the updater is called?
    – Jorjon
    Nov 10 at 19:40












up vote
0
down vote

favorite









up vote
0
down vote

favorite











I have an SVG map with paths, and those paths change colors when I hover over them.
It changes state of specific section, for example my state looks like that:



 POL3139: 
color: '#fbb9c5'
,


I am trying to switch back to the base color after I leave the path.
Here I am changing



onHover = (event) => 
event.stopPropagation();
const e = event.target.id
this.setState(prevState => (
[e]:
...prevState,
color: '#650df9'
,
));




It totally works and changes my color to the picked one.
But then I am trying to revert back to the original one.



I tried that by making a base color in the state:



 POL3139: 
color: '#fbb9c5',
base: '#fbb9c5'
,


and then onMouseLeave:



onLeave = (event) => 
event.stopPropagation();
const e = event.target.id;
this.setState(prevState => (
[e]:
...prevState,
// color: prevState.base - doesn't work
// color: prevState.[e].base - doesn't work
// color: [prevState.e.base] - doesn't work
color: 'pink'

));




I was trying many possible solutions but I can't get it to work.
I am still learning react and it might be an easy one but I can't figure it out.










share|improve this question













I have an SVG map with paths, and those paths change colors when I hover over them.
It changes state of specific section, for example my state looks like that:



 POL3139: 
color: '#fbb9c5'
,


I am trying to switch back to the base color after I leave the path.
Here I am changing



onHover = (event) => 
event.stopPropagation();
const e = event.target.id
this.setState(prevState => (
[e]:
...prevState,
color: '#650df9'
,
));




It totally works and changes my color to the picked one.
But then I am trying to revert back to the original one.



I tried that by making a base color in the state:



 POL3139: 
color: '#fbb9c5',
base: '#fbb9c5'
,


and then onMouseLeave:



onLeave = (event) => 
event.stopPropagation();
const e = event.target.id;
this.setState(prevState => (
[e]:
...prevState,
// color: prevState.base - doesn't work
// color: prevState.[e].base - doesn't work
// color: [prevState.e.base] - doesn't work
color: 'pink'

));




I was trying many possible solutions but I can't get it to work.
I am still learning react and it might be an easy one but I can't figure it out.







reactjs






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 10 at 17:59









Kamil Sławecki

101




101











  • What does prevState.base represent when the updater is called?
    – Jorjon
    Nov 10 at 19:40
















  • What does prevState.base represent when the updater is called?
    – Jorjon
    Nov 10 at 19:40















What does prevState.base represent when the updater is called?
– Jorjon
Nov 10 at 19:40




What does prevState.base represent when the updater is called?
– Jorjon
Nov 10 at 19:40












1 Answer
1






active

oldest

votes

















up vote
0
down vote



accepted










I don't think you're deconstructing your prevState properly.



Here's an example to illustrate how to deconstruct:



import React from "react";
import ReactDOM from "react-dom";

class App extends React.Component
state =
style:
color: "black",
base: "black",
cursor: "pointer"

;

handleMouseEnter = e =>
const style = this.state;
this.setState( style: ...style, color: "red" );
;

handleMouseLeave = e =>
const style = this.state;
this.setState( style: ...style, color: style.base );
;

render()
return (
<div
onMouseEnter=this.handleMouseEnter
onMouseLeave=this.handleMouseLeave
style=this.state.style
>
<h1>hello</h1>
</div>
);



const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);


In this case style is equivalent to your [e].



In particular, look at the deconstructing here:



this.setState( style: ...style, color: style.base );


There's a working example here.






share|improve this answer




















  • He's using an updater as first function: reactjs.org/docs/react-component.html#setstate
    – Jorjon
    Nov 10 at 19:37










  • I know, that doesn't really change anything here as far as I'm aware.
    – Colin
    Nov 10 at 19:43










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%2f53241872%2freact-prevstate-issues-getting-back-old-value%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
0
down vote



accepted










I don't think you're deconstructing your prevState properly.



Here's an example to illustrate how to deconstruct:



import React from "react";
import ReactDOM from "react-dom";

class App extends React.Component
state =
style:
color: "black",
base: "black",
cursor: "pointer"

;

handleMouseEnter = e =>
const style = this.state;
this.setState( style: ...style, color: "red" );
;

handleMouseLeave = e =>
const style = this.state;
this.setState( style: ...style, color: style.base );
;

render()
return (
<div
onMouseEnter=this.handleMouseEnter
onMouseLeave=this.handleMouseLeave
style=this.state.style
>
<h1>hello</h1>
</div>
);



const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);


In this case style is equivalent to your [e].



In particular, look at the deconstructing here:



this.setState( style: ...style, color: style.base );


There's a working example here.






share|improve this answer




















  • He's using an updater as first function: reactjs.org/docs/react-component.html#setstate
    – Jorjon
    Nov 10 at 19:37










  • I know, that doesn't really change anything here as far as I'm aware.
    – Colin
    Nov 10 at 19:43














up vote
0
down vote



accepted










I don't think you're deconstructing your prevState properly.



Here's an example to illustrate how to deconstruct:



import React from "react";
import ReactDOM from "react-dom";

class App extends React.Component
state =
style:
color: "black",
base: "black",
cursor: "pointer"

;

handleMouseEnter = e =>
const style = this.state;
this.setState( style: ...style, color: "red" );
;

handleMouseLeave = e =>
const style = this.state;
this.setState( style: ...style, color: style.base );
;

render()
return (
<div
onMouseEnter=this.handleMouseEnter
onMouseLeave=this.handleMouseLeave
style=this.state.style
>
<h1>hello</h1>
</div>
);



const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);


In this case style is equivalent to your [e].



In particular, look at the deconstructing here:



this.setState( style: ...style, color: style.base );


There's a working example here.






share|improve this answer




















  • He's using an updater as first function: reactjs.org/docs/react-component.html#setstate
    – Jorjon
    Nov 10 at 19:37










  • I know, that doesn't really change anything here as far as I'm aware.
    – Colin
    Nov 10 at 19:43












up vote
0
down vote



accepted







up vote
0
down vote



accepted






I don't think you're deconstructing your prevState properly.



Here's an example to illustrate how to deconstruct:



import React from "react";
import ReactDOM from "react-dom";

class App extends React.Component
state =
style:
color: "black",
base: "black",
cursor: "pointer"

;

handleMouseEnter = e =>
const style = this.state;
this.setState( style: ...style, color: "red" );
;

handleMouseLeave = e =>
const style = this.state;
this.setState( style: ...style, color: style.base );
;

render()
return (
<div
onMouseEnter=this.handleMouseEnter
onMouseLeave=this.handleMouseLeave
style=this.state.style
>
<h1>hello</h1>
</div>
);



const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);


In this case style is equivalent to your [e].



In particular, look at the deconstructing here:



this.setState( style: ...style, color: style.base );


There's a working example here.






share|improve this answer












I don't think you're deconstructing your prevState properly.



Here's an example to illustrate how to deconstruct:



import React from "react";
import ReactDOM from "react-dom";

class App extends React.Component
state =
style:
color: "black",
base: "black",
cursor: "pointer"

;

handleMouseEnter = e =>
const style = this.state;
this.setState( style: ...style, color: "red" );
;

handleMouseLeave = e =>
const style = this.state;
this.setState( style: ...style, color: style.base );
;

render()
return (
<div
onMouseEnter=this.handleMouseEnter
onMouseLeave=this.handleMouseLeave
style=this.state.style
>
<h1>hello</h1>
</div>
);



const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);


In this case style is equivalent to your [e].



In particular, look at the deconstructing here:



this.setState( style: ...style, color: style.base );


There's a working example here.







share|improve this answer












share|improve this answer



share|improve this answer










answered Nov 10 at 19:31









Colin

3,3282420




3,3282420











  • He's using an updater as first function: reactjs.org/docs/react-component.html#setstate
    – Jorjon
    Nov 10 at 19:37










  • I know, that doesn't really change anything here as far as I'm aware.
    – Colin
    Nov 10 at 19:43
















  • He's using an updater as first function: reactjs.org/docs/react-component.html#setstate
    – Jorjon
    Nov 10 at 19:37










  • I know, that doesn't really change anything here as far as I'm aware.
    – Colin
    Nov 10 at 19:43















He's using an updater as first function: reactjs.org/docs/react-component.html#setstate
– Jorjon
Nov 10 at 19:37




He's using an updater as first function: reactjs.org/docs/react-component.html#setstate
– Jorjon
Nov 10 at 19:37












I know, that doesn't really change anything here as far as I'm aware.
– Colin
Nov 10 at 19:43




I know, that doesn't really change anything here as far as I'm aware.
– Colin
Nov 10 at 19:43

















 

draft saved


draft discarded















































 


draft saved


draft discarded














StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53241872%2freact-prevstate-issues-getting-back-old-value%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

Top Tejano songwriter Luis Silva dead of heart attack at 64

ReactJS Fetched API data displays live - need Data displayed static

政党