Реагируйте: Данные не будут сохранены в этом. Состояние - PullRequest
0 голосов
/ 23 ноября 2018

Итак, я пытаюсь отправить запрос на получение на мой сервер узлов, который отвечает отправкой списка объектов, которые я хочу отобразить на своей странице.Пробовал много разных методов, но я не могу найти решение.Также я выполняю рендеринг через сервер, если это поможет.

Код клиента:

class BookTools extends React.Component {

constructor(props) {
    super(props);
    this.state = {
        books: []
    };
    this.handleAdd = this.handleAdd.bind(this);
    this.handleEdit = this.handleEdit.bind(this);
    this.handleDelete = this.handleDelete.bind(this);
    this.updateList = this.updateList.bind(this);

    fetch('/getbooks').then(function (res) {
        return res.json();
    }).then(function (json) {
        console.log(json);
        const data = JSON.stringify(json);
        console.log(data);
        this.setState({ books: data})
    });
}

Не могу использовать componentDidMount, так как он SSR и не может заставить компонент componentWillMount работать,поэтому я попытался сделать это в конструкторе, как это было предложено другим.Оба файла console.logs выводят правильный ответ.

Я также пытался выполнить оба действия: this.setState({ books: json.body }) и this.setState({ books: json.data }) без другого результата.И да, я новичок, чтобы реагировать так же, как узел / экспресс

Спасибо за любую помощь:)

1 Ответ

0 голосов
/ 23 ноября 2018

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

Также убедитесь, что API возвращает данные

Измените

    fetch('/getbooks').then(function (res) {
          return res.json();
}).then(function (json) {
    console.log(json);
    const data = JSON.stringify(json);
    console.log(data);
    this.setState({ books: data})
});

На

   fetch('/getbooks') 
       .then(res => res.json())
       .then(json => {
            console.log(json);
            const data = JSON.stringify(json);
            console.log(data);
            this.setState({ books: data})
   });

Или

   fetch('/getbooks')
     .then(function (res) {
         return res.json();
      }.bind(this))
     .then(function (json) {
           console.log(json);
           const data = JSON.stringify(json);
           console.log(data);
           this.setState({ books: data})
   }.bind(this));
...