i am working on react application. if i am export default App then this.setState is working but when i am working with export default Radium(App). it's not working.
following error occurred:
when click on Toggle Person button following error occurred:
index.js:1437 Warning: Can't call setState on a component that is not yet mounted. This is a no-op, but it might indicate a bug in your application. Instead, assign to `this.state` directly or define a `state = {};` class property with the desired state in the App component.
What I have tried:
app.js Code:
App.js code:
<pre>import React, { Component } from 'react';
import './App.css';
import Radium from 'radium';
import Person from './Person/Person';
class App extends Component {
state = {
persons: [
{ id: 'asfal', name: 'Max', age: 28 },
{ id: 'vasdfl', name: 'Manu', age: 29 },
{ id: 'asdfll', name: 'Stephanie', age: 26 }
],
otherState: 'some other value',
showPersons: false
}
nameChangeHandler = (event, id) => {
const personIndex = this.state.persons.findIndex(p => {
return p.id === id;
});
const person = {
...this.state.persons[personIndex]
};
person.name = event.target.value;
const persons = [...this.state.persons];
persons[personIndex] = person;
this.setState({ persons: persons });
}
deletePersonHandler = (personIndex) => {
const persons = [...this.state.persons];
persons.splice(personIndex, 1);
this.setState({ persons: persons });
}
togglePersonHandler = () => {
const doesShow = this.state.showPersons;
this.setState({ showPersons: !doesShow });
}
render() {
const style = {
backgroundColor: 'green',
color: 'white',
font: 'inherit',
border: '1px solid blue',
padding: '8px',
cursor: 'pointer',
':hover': {
backgroundColor: 'lightgreen',
color: 'black'
}
};
let persons = null;
if (this.state.showPersons) {
persons = (
<div>
{this.state.persons.map((person, index) => {
return <Person
click={() => this.deletePersonHandler(index)}
name={person.name}
age={person.age}
key={person.id}
changed={(event) => this.nameChangeHandler(event, person.id)} />
})}
</div>
);
style.backgroundColor = 'red';
style[':hover'] = {
backgroundColor: 'salmon',
color: 'black'
};
}
let classes = [];
if (this.state.persons.length <= 2) {
classes.push('red');
}
if (this.state.persons.length <= 1) {
classes.push('bold');
}
return (
<div className="App">
<h1>Hi, I'm a React App</h1>
<p className={classes.join(' ')}>This is really working</p>
<button
style={style}
onClick={this.togglePersonHandler}>Toggle Person</button>
{persons}
</div>
);
}
}
export default Radium(App);
person.js code:
import React from 'react';
import Radium from 'radium';
import './Person.css';
const person = (props) => {
return(
I'm {props.name} and I am {props.age} year old!
{props.children}
)
};
export default Radium(person);