React - prevstate issues, getting back old value
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
add a comment |
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
What doesprevState.baserepresent when the updater is called?
– Jorjon
Nov 10 '18 at 19:40
add a comment |
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
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
reactjs
asked Nov 10 '18 at 17:59
Kamil SławeckiKamil Sławecki
101
101
What doesprevState.baserepresent when the updater is called?
– Jorjon
Nov 10 '18 at 19:40
add a comment |
What doesprevState.baserepresent 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
add a comment |
1 Answer
1
active
oldest
votes
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.
He's using anupdateras 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
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%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
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.
He's using anupdateras 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
add a comment |
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.
He's using anupdateras 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
add a comment |
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.
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.
answered Nov 10 '18 at 19:31
ColinColin
4,2462626
4,2462626
He's using anupdateras 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
add a comment |
He's using anupdateras 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
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%2f53241872%2freact-prevstate-issues-getting-back-old-value%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
What does
prevState.baserepresent when the updater is called?– Jorjon
Nov 10 '18 at 19:40