Обновление состояния после исправления в React - PullRequest
0 голосов
/ 24 октября 2018

Я пытаюсь выяснить, как автоматически обновлять состояние после запроса исправления, чтобы при нажатии кнопки он автоматически добавлял их в счетчик.К сожалению, для обновления требуется загрузка страницы.Есть ли что-нибудь, что вы можете увидеть на этом?Спасибо за любую помощь, спасибо.

import React, { Component } from "react";
import "./Like.css";

class Button extends Component {
  constructor(props) {
    super(props);
    this.state = {
      counter: this.props.counter
    };
  }

  handleSubmit = event => {
    event.preventDefault();
    fetch(`http://localhost:3001/api/tracklists/${this.props.id}`, {
      method: "PATCH",
      headers: {
        Accept: "application/json",
        "Content-Type": "application/json"
      },
      body: JSON.stringify({
        tracklist: {
          title: this.props.title,
          url: this.props.url,
          genre: this.props.genre,
          tracklist: this.props.tracklist,
          likes: this.props.counter + 1
        }
      })
    })
      .then(response => response.json())
      .then(response => {
        this.setState({
          counter: this.props.counter
        });
      });
  };

  render() {
    return (
      <div className="customContainer">
        <button onClick={this.handleSubmit}>{this.state.counter}</button>
      </div>
    );
  }
}

export default Button;

1 Ответ

0 голосов
/ 24 октября 2018

Добро пожаловать на SO

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

Вы пытались использовать встроенный метод жизненного цикла компонента React ComponentcomponentDidUpdate(prevProps)?

В вашем случае вы бы сделали

componentDidUpdate(prevProps) {
  // you always need to check if the props are different
  if (this.props.counter !== prevProps.counter) {
    this.setState({ counter: this.props.counter });
  }
}

Вы можете найти документацию здесь: https://reactjs.org/docs/react-component.html#componentdidupdate

При этом я не понимаю, почемувы бы не отображали реквизит напрямую, а не дублировали бы его в состоянии ... Как в:

render() {
  return (
    <div className="customContainer">
      <button onClick={this.handleSubmit}>{this.props.counter}</button>
    </div>
  );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...