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.
reactjs
add a comment |
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.
reactjs
What doesprevState.base
represent when the updater is called?
– Jorjon
Nov 10 at 19:40
add a comment |
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.
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 at 17:59
Kamil Sławecki
101
101
What doesprevState.base
represent when the updater is called?
– Jorjon
Nov 10 at 19:40
add a comment |
What doesprevState.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
add a comment |
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.
He's using anupdater
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
add a comment |
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.
He's using anupdater
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
add a comment |
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.
He's using anupdater
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
add a comment |
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.
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 at 19:31
Colin
3,3282420
3,3282420
He's using anupdater
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
add a comment |
He's using anupdater
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
add a comment |
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.base
represent when the updater is called?– Jorjon
Nov 10 at 19:40