У меня есть приложение, которое перечисляет книги на пользовательской полке, а затем на следующей странице поиска. Пользователь переходит на страницу поиска, находит заголовок и выбирает полку для заголовка, на которой нужно разместить его. Когда они вернутся на главную страницу, этот заголовок должен отображаться на нужной полке.
Функциональность заключается в том, что в объекты вносятся изменения, но когда я нажимаю кнопку «Домой» или «Назад» в браузере, изменения не отображаются, пока я не обновлю браузер.
Что мне нужно сделать, чтобы это изменение отображалось, когда пользователь переходит на домашнюю страницу?
Я поместил основную часть кода в Коды
App.js
import React, { Component } from 'react'
import ListBooks from './ListBooks'
import SearchBooks from './SearchBooks'
import * as BooksAPI from './utils/BooksAPI'
import { Route } from 'react-router-dom'
class BooksApp extends Component {
state = {
books: []
}
componentDidMount() {
BooksAPI.getAll()
.then((books) => {
this.setState(() => ({
books
}))
})
}
updateShelf = (book, shelf) => {
const bookFromState = this.state.books.find(b => b.id === book.id);
if (bookFromState) {
// update existing
bookFromState.shelf = shelf;
this.setState(currentState => ({
books: currentState.books
}));
} else {
// add new one
this.setState(prevState => ({
books: prevState.books
}));
}
BooksAPI.update(book, shelf);
};
render() {
return (
<div>
<Route exact path='/' render = {() => (
<ListBooks
books = {this.state.books}
onUpdateShelf = {this.updateShelf}
/>
)} />
<Route exact path='/search' render = {() => (
<SearchBooks
books = {this.state.books}
onUpdateShelf = {this.updateShelf}
/>
)} />
</div>
)
}
}
export default BooksApp
Это происходит, просто щелкните желтую вкладку в окне браузера песочницы. Не уверен, почему появляется эта ошибка, но это только в песочнице



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


Итак, я проверил ваш код. На самом деле у вас была проблема с обновлением вашего состояния. books не менялся после того, как вы выбрали книгу на экране поиска. Вот код из вашего App.js:
updateShelf = (book, shelf) => {
console.info(book, shelf)
const bookFromState = this.state.books.find(b => b.id === book.id);
if (bookFromState) {
// update existing
bookFromState.shelf = shelf;
this.setState(currentState => ({
books: currentState.books
}));
} else {
// add new one
// the following lines of yours were different
book.shelf = shelf;
this.setState(prevState => ({
books: prevState.books.concat(book)
}));
}
BooksAPI.update(book, shelf);
};
Таким образом, у вас просто был books: prevState.books вместо того, чтобы фактически объединить книгу с предыдущим состоянием. А прямо перед этим полку с книгой нужно поменять на ту, которую вы проходите.
PS: Возможно, я оставил какие-то заявления console.info. Надеюсь, это не проблема, и вы уберете беспорядок.
Потрясающие! Привет, дружище, это было на высоте.
ваша песочница не работает