React - prevstate issues, getting back old value










0















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 '18 at 19:40















0















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 '18 at 19:40













0












0








0








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 '18 at 17:59









Kamil SławeckiKamil Sławecki

101




101












  • What does prevState.base represent when the updater is called?

    – Jorjon
    Nov 10 '18 at 19:40

















  • What does prevState.base represent when the updater is called?

    – Jorjon
    Nov 10 '18 at 19:40
















What does prevState.base represent when the updater is called?

– Jorjon
Nov 10 '18 at 19:40





What does prevState.base represent when the updater is called?

– Jorjon
Nov 10 '18 at 19:40












1 Answer
1






active

oldest

votes


















0














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 '18 at 19:37











  • I know, that doesn't really change anything here as far as I'm aware.

    – Colin
    Nov 10 '18 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',
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%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









0














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 '18 at 19:37











  • I know, that doesn't really change anything here as far as I'm aware.

    – Colin
    Nov 10 '18 at 19:43















0














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 '18 at 19:37











  • I know, that doesn't really change anything here as far as I'm aware.

    – Colin
    Nov 10 '18 at 19:43













0












0








0







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 '18 at 19:31









ColinColin

4,2462626




4,2462626












  • He's using an updater as first function: reactjs.org/docs/react-component.html#setstate

    – Jorjon
    Nov 10 '18 at 19:37











  • I know, that doesn't really change anything here as far as I'm aware.

    – Colin
    Nov 10 '18 at 19:43

















  • He's using an updater as first function: reactjs.org/docs/react-component.html#setstate

    – Jorjon
    Nov 10 '18 at 19:37











  • I know, that doesn't really change anything here as far as I'm aware.

    – Colin
    Nov 10 '18 at 19:43
















He's using an updater as first function: reactjs.org/docs/react-component.html#setstate

– Jorjon
Nov 10 '18 at 19:37





He's using an updater as first function: reactjs.org/docs/react-component.html#setstate

– Jorjon
Nov 10 '18 at 19:37













I know, that doesn't really change anything here as far as I'm aware.

– Colin
Nov 10 '18 at 19:43





I know, that doesn't really change anything here as far as I'm aware.

– Colin
Nov 10 '18 at 19:43

















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%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

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

ャフサォクコ ケウ,コ,ワ メ,ロスョノ゙,クネ,フムカヤヲニ,エコ゚ツ ウイオン゙ケワサネォキモュキォウイノンコチ゚メヌナイゥフュ,カヒウネェ ネ,ホノケ,ムュキ ッボーミュハ,チ ツス ィ メウイマヤ,゙ウチ ヅ ロ,ォジヌェ ャヌット ェ,マャ,チナエヒネソキツテ トホヲヲミーァ

Node.js puppeteer - Use values from array in a loop to cycle through pages