@AlexMine
Учусь

Как выполнить функцию 1 раз?

Как выполнить функцию один раз?
class App extends React.Component {
	constructor(props) {
		super(props);

		this.state = {
			activeView: 'selectcountryandcity',
			fetchedUser: null,
		};
	}
	componentDidMount() {
	}

	checkUserBd = (userId) => {
		axios.get('http://localhost:8000/api/profiles/', {
			params: {
				vk_id:userId
			}
		})
		.then(function(response){
			if(response.data.length !== 0){
				this.setState({user: response.data[0]});
				console.log('user')
			} else {
				console.log('net')
			}
		}.bind(this))
	}
	render() {
		this.checkUserBd(123123);
         <Root activeView={this.state.activeView}>
					<SelectCountryAndCity 
						id="selectcountryandcity"
						token={this.state.token}
						countries={this.state.countries}
						cities={this.state.cities}
					/>
				</Root>
	};
};


Сейчас функция CheckUserBd при загрузке страницы начинает вызывать бесконечное количество раз, если убираю .bind(this) в функции, то не передается контекст и функцию this.setState не видно.
  • Вопрос задан
  • 3537 просмотров
Решения вопроса 2
Vlad_IT
@Vlad_IT
Front-end разработчик
Никогда не пишите в render код/функции, которые меняют состояние setState, т.к. почти за каждым setState следует render, а render опять вызовет setState, а тот опять render - и так вечно, что у вас и происходит. Вы можете вызвать checkUserBd внутри componentDidMount.
Ответ написан
0xD34F
@0xD34F Куратор тега React
Перенесите вызов checkUserBd в componentDidMount.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы