Использование результатов выборки для возврата элемента в компонент - React
У меня есть веб-приложение, построенное на python/django, и я пытаюсь использовать React для front-end. Приложение имеет шаблон с пустым div (#profile), который заполняется с помощью React.
В шаблоне есть атрибут, который используется для получения данных из бэкенда. Данные передаются в качестве реквизита в главную функцию/компонент (Profile) для инстанцирования состояния.
let username = document.getElementById('profile').getAttribute('data-profile');
fetch(`/getFollow/${username}`)
.then(response => response.json())
.then(results => {
ReactDOM.render(<Profile profile={username} followers={results.follower_count} following={results.following_count}/>, document.querySelector("#profile"));
})
Компонент Profile возвращает элементы html и содержит еще одну функцию/компонент (FollowButton)
function Profile(props) {
const [state, setState] = React.useState({
follower_count: props.followers,
following_count: props.following,
profile: props.profile
});
return (
<div>
<br></br>
<div class="row justify-content-center">
<h2 id="profile">{state.profile}</h2>
<span>
<FollowButton profile={state.profile}/>
</span>
</div>
<div class="row justify-content-center">
followers: {state.follower_count} | following: {state.following_count}
</div>
<br></br>
</div>
);
}
Кнопка FollowButton использовала переданный реквизит, чтобы сделать еще один выборку и на основе результатов динамически вернуть элемент кнопки.
function FollowButton(props){
fetch(`/getFollow/${props.profile}`)
.then(response => response.json())
.then(results => {
if (results.isFollowing == "True"){
//Return Following button
//console.log('following');
<button class="badge badge-pill ml-2 btn-primary">Following</button>
}
else if (results.isFollowing == "False"){
//Return Follow button
//console.log('follow');
<button class="badge badge-pill ml-2 btn-secondary">Follow</button>
}
else if (results.isFollowing == "Self"){
//No button
//console.log('user's own page');
return <button></button>
}
});
}
У меня пара ошибок -
- Minified React error #152
- Uncaught (in promise) Error: Minified React error #152
Я знаю, что проблема в том, что FollowButton не возвращает ни одно из утверждений внутри fetch/then. Если я помещаю оператор возврата за ее пределами, она возвращается нормально, но мне нужны данные внутри. Я полагаю, это происходит потому, что я пытаюсь сделать что-то синхронное, которое является асинхронным?
Я слишком новичок в React, чтобы знать лучший способ решения этой проблемы. Я видел несколько похожих вопросов, но в большинстве из них используется функция componentDidMount(), которая, как мне кажется, больше не нужна в текущей версии React.