Я создаю вход в систему с помощью MongoDB, поскольку моя база данных размещена на heroku. Я хочу изменить значение моего компонента после обновления свойства моего зарегистрированного пользователя в моей БД.
Это моя функция, которая обновляет «Кредиты» моего пользователя:
//ProgressMobileStepper.js
updateCredits() {
fetch('https://mighty-pigeon-8369.herokuapp.com/users/5', {
method: 'put',
headers: {
...authHeader(),
'Accept': 'application/json, text/plain, */*',
'Content-Type': 'application/json'
},
body: JSON.stringify({credits: 20})
}).then(res=>res.json())
.then(res => console.info(res))
}
Он запускается событием onClick кнопки в том же файле!
Вот мой компонент (другой файл), который должен перерисовать панель инструментов сразу после обновления сведений о моем пользователе:
//ItemViewAll.js
<Toolbar style = {{background: '#ffffff', color: '#000'}}>
<IconButton
color = "inherit"
onClick = {this.handleClose}
style = {{outline: 'none'}}
>
<CloseIcon onClick = {this.handleClose}/>
</IconButton>
{user && user.token &&
<Button variant = "outlined">
{user.credits}
</Button>
}
</Toolbar>
И вот json пользователя (не знаю, полезно ли):
//MongoDB
{
"credits": 20,
"_id": "5c13fd6008dd3400169867a5",
"firstName": "Martin",
"lastName": "Seubert",
"username": "admin",
"createdDate": "2018-12-14T18:58:40.295Z",
"__v": 0,
"id": "5c13fd6008dd3400169867a5"
}
Если у вас есть предложения по изменению рендеринга после нажатия кнопки обновления сведений о моем пользователе на панели инструментов ItemViewAll.js, я был бы очень благодарен!
Ура и с Рождеством!
Мартин
EDIT
Это отрисовка моего дочернего компонента с панелью инструментов:
render() {
const { classes } = this.props;
let user = JSON.parse(localStorage.getItem('user'));
return(
...
<Toolbar style = {{background: '#ffffff', color: '#000'}}>
<IconButton
color = "inherit"
onClick = {this.handleClose}
style = {{outline: 'none'}}
>
<CloseIcon onClick = {this.handleClose}/>
</IconButton>
{user && user.token &&
<Button variant = "outlined">
{user.credits}
</Button>
}
</Toolbar>
)
}
@ShubhamKhatri Спасибо за ответ. Я отредактировал для вас свой пост.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Если вам нужно загрузить какие-либо данные из API или аналогичного, вы должны сделать это внутри componentDidMount
Кроме того, очень сложно сказать на примере, который вы предоставили иерархию ваших компонентов (состав).
В любом случае, если ваш дочерний компонент должен обновить родительский компонент, вам придется передать метод в качестве опоры от вашего родительского компонента вашему дочернему компоненту и передать данные, которые были загружены в ваш дочерний компонент, вашему родительскому компоненту, вызвав ту же опору. вы прошли.
Если вам вообще нужно обновить тот же компонент, из которого вы получили данные в первую очередь, просто вызовите this.setState после того, как данные были получены.
Если вам нужно обновить родительский элемент:
.then(res=>res.json())
.then(res => this.props.methodPassedFromParent(res))
Если это в том же компоненте
.then(res=>res.json())
.then(res => this.setState({ user: res })
Спасибо за вашу помощь, сначала я постараюсь реализовать решение в том же компоненте, а позже попытаюсь обновить родительский.
откуда берется пользовательский объект при рендеринге. Также нужно ли использовать ответ
updateCreditsили нет