Компонент Reactjs rerender после операции CRUD

Я создаю вход в систему с помощью 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>
           )
}

откуда берется пользовательский объект при рендеринге. Также нужно ли использовать ответ updateCredits или нет

Shubham Khatri 16.12.2018 13:42

@ShubhamKhatri Спасибо за ответ. Я отредактировал для вас свой пост.

Martin Seubert 16.12.2018 14:48
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
359
1

Ответы 1

Если вам нужно загрузить какие-либо данные из API или аналогичного, вы должны сделать это внутри componentDidMount

Кроме того, очень сложно сказать на примере, который вы предоставили иерархию ваших компонентов (состав).

В любом случае, если ваш дочерний компонент должен обновить родительский компонент, вам придется передать метод в качестве опоры от вашего родительского компонента вашему дочернему компоненту и передать данные, которые были загружены в ваш дочерний компонент, вашему родительскому компоненту, вызвав ту же опору. вы прошли.

Если вам вообще нужно обновить тот же компонент, из которого вы получили данные в первую очередь, просто вызовите this.setState после того, как данные были получены.

Если вам нужно обновить родительский элемент:

.then(res=>res.json())
.then(res => this.props.methodPassedFromParent(res))

Если это в том же компоненте

.then(res=>res.json())
.then(res => this.setState({ user: res })

Спасибо за вашу помощь, сначала я постараюсь реализовать решение в том же компоненте, а позже попытаюсь обновить родительский.

Martin Seubert 16.12.2018 14:56

Другие вопросы по теме