This.setstate не работает в react js
я работаю над приложением react. если я экспортировать приложение по умолчанию, то это.выполнении функция setState работает, но когда я работаю с экспортом Радия по умолчанию(приложение). это не работает.
произошла следующая ошибка:
при нажатии на кнопку Toggle Person произошла следующая ошибка:
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.
Что я уже пробовал:
app.js код:
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 код:
импорт реагируют с 'реагировать';
импорт радия из компании "Радий";
импорт'. /Person.css';
const person = (реквизит) => {
вернуть(
Я {props.name} а мне {реквизит.возраст} год!
{реквизит.дети}
)
};
экспорт радия по умолчанию(персона);