 
			
				31.10.2020, 17:24
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Интересующийся 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 20.07.2020 
					
					
					
						Сообщений: 16
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		Огромное спасибо, буду улучшать знания для того что бы больше вникать    
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				03.11.2020, 02:48
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Интересующийся 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 20.07.2020 
					
					
					
						Сообщений: 16
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	
		
			Сообщение от Nexus
			 
		
	 | 
 
	| 
		dewembas, сделайте макет вашей задачи в любой песочнице, без него непонятно где у вас undefined.
	 | 
 
	
 
 Попрошу у вас ещё подсказку) если не затруднит, подскажите как по онклику на кнопку добавить в избранное, переместить данный фильм на страницу избранного ? Буду благодарен за любую подсказку .   
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				03.11.2020, 11:57
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 04.12.2012 
					
					
					
						Сообщений: 3,841
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		dewembas,  
	
 
	| 
		
			Сообщение от dewembas
			
		
	 | 
 
	| 
		как по онклику на кнопку добавить в избранное, переместить данный фильм на страницу избранного ?
	 | 
 
	
 
 По-хорошему стоит реализовать регистрацию/авторизацию пользователей и сохранить список избранного в БД. 
 
Но чтобы просто "поиграться", список избранного можно хранить в localStorage либо в indexedDB.
 
Если решите хранить список в IndexedDB, то лучше установите пакет, который поможет с нею взаимодействовать, например  LocalForage.
 
Работать с localStorage можно напрямую, через его API, однако для этого все же лучше написать какую-нибудь, хотя бы самую простую обертку с методами get, set для более просто модифицирования кода в будущем (к слову, LocalForage умеет работать и с localStorage в кач-ве хранилища).
 
Операции чтения/записи из хранилища лучше делать асинхронными, даже если они выполняются синхронно (как в случае с localStorage), чтобы потом можно было легко изменить хранилище даже на то, операции чтения/записи в которое осуществляются асинхронно.
 
Если вместе с "меткой" о добавлении фильма в избранное нужно хранить еще какие-либо данные, например дату добавления этого фильма в избранное, то лучше (имхо, лучше для того юзать БД) хранить список избранного не как  одну запись со списком идентификаторов в хранилище, а как список ключ-значение (<prefix>-<movie-id> => <some-details>). Т.е. для каждого отдельного фильма добавленного в хранилище создавать ключ в определенном формате (пример формата был выше), значением которого будет дополнительная информация об этом ключе.  
		
	
		
		
		
		
		
		
	
		
			
			
	
			
			
			
			
			
				 
			
			
			
			
			
			
				
			
			
			
		 
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				06.11.2020, 03:39
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Интересующийся 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 20.07.2020 
					
					
					
						Сообщений: 16
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	
		
			Сообщение от Nexus
			 
		
	 | 
 
	
		dewembas,  
По-хорошему стоит реализовать регистрацию/авторизацию пользователей и сохранить список избранного в БД.  
 
Но чтобы просто "поиграться", список избранного можно хранить в localStorage либо в indexedDB. 
 
Если решите хранить список в IndexedDB, то лучше установите пакет, который поможет с нею взаимодействовать, например LocalForage. 
 
Работать с localStorage можно напрямую, через его API, однако для этого все же лучше написать какую-нибудь, хотя бы самую простую обертку с методами get, set для более просто модифицирования кода в будущем (к слову, LocalForage умеет работать и с localStorage в кач-ве хранилища). 
 
Операции чтения/записи из хранилища лучше делать асинхронными, даже если они выполняются синхронно (как в случае с localStorage), чтобы потом можно было легко изменить хранилище даже на то, операции чтения/записи в которое осуществляются асинхронно. 
 
Если вместе с "меткой" о добавлении фильма в избранное нужно хранить еще какие-либо данные, например дату добавления этого фильма в избранное, то лучше (имхо, лучше для того юзать БД) хранить список избранного не как одну запись со списком идентификаторов в хранилище, а как список ключ-значение (<prefix>-<movie-id> => <some-details>). Т.е. для каждого отдельного фильма добавленного в хранилище создавать ключ в определенном формате (пример формата был выше), значением которого будет дополнительная информация об этом ключе.
	 | 
 
	
 
 
Спасибо, решил все таки использовать LocslStorage, но есть опять проблема в масив пушится только один объект, что делать ?  
		
	
		
		
		
		
		
		
	
		
			
			
	
			
			
			
			
			
				 
			
			
			
			
			
			
				
			
			
			
		 
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				06.11.2020, 11:21
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 04.12.2012 
					
					
					
						Сообщений: 3,841
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		Записывайте в хранилище не сами объекты, а их идентификаторы. 
Локальное хранилище не резиновое, записывая в него объекты вы быстро израсходуете все доступное пространство.
 
	
 
	| 
		
			Сообщение от dewembas
			
		
	 | 
 
	| 
		Работать с localStorage можно напрямую, через его API, однако для этого все же лучше написать какую-нибудь, хотя бы самую простую обертку с методами get, set
	 | 
 
	
 
 Мой совет по поводу обертки для localStorage вы проигнорировали, ваше право.
 
	
 
	| 
		
			Сообщение от dewembas
			
		
	 | 
 
	| 
		но есть опять проблема в масив пушится только один объект
	 | 
 
	
 
 Вы записываете в хранилище всегда только один объект, чему тут удивляться?
 
const favotireMoviesIds = JSON.parse(localStorage.getItem('favorite-movies')) || [];
const markMovieAsFavorite = movieId => {
    localStorage.setItem('favorite-movies', JSON.stringify([...favotireMoviesIds, movieId]));
};
 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				13.12.2020, 03:17
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Интересующийся 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 20.07.2020 
					
					
					
						Сообщений: 16
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		И вновь здравствуйте, вот опять вернулся к этому проекту, уже второй день нее могу сделать проверку LocalStorage  на то что бы   фильм добавлялся только один раз, прошу помощи    
Буду признателен , за прошлый ответ большое спасибо, немного забыл поблагодарить    
Ссылка на саму страницу где нужно совершить проверку :  https://github.com/Dewembas/React-mo...ents/Modals.js 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				13.12.2020, 07:55
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 03.02.2020 
					
					
					
						Сообщений: 2,777
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 Если бы Вы еще намекнули, какую структуру имеет arr, что такое objLocal, и что делает markMovieAsFavorite (какие у нее параметры) 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				13.12.2020, 20:25
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Интересующийся 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 20.07.2020 
					
					
					
						Сообщений: 16
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	
		
			Сообщение от voraa
			 
		
	 | 
 
	| 
		Если бы Вы еще намекнули, какую структуру имеет arr, что такое objLocal, и что делает markMovieAsFavorite (какие у нее параметры)
	 | 
 
	
 
 
const arr=JSON.parse(localStorage.getItem('favorite-movies'))
let objLocal ={
  img: data[openItemIndex]?.poster_path,
  title: data[openItemIndex]?.original_title,
  opis:  data[openItemIndex]?.overview,
  id: data[openItemIndex]?.id,
  language: data[openItemIndex]?.original_language,
  date: data[openItemIndex]?.release_date,
  score: data[openItemIndex]?.vote_average,
}
const favotireMoviesIds = JSON.parse(localStorage.getItem('favorite-movies')) || [];
    const markMovieAsFavorite = movieId => {
    localStorage.setItem('favorite-movies', JSON.stringify([...favotireMoviesIds, movieId]));
};
Вот.  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				13.12.2020, 21:16
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 03.02.2020 
					
					
					
						Сообщений: 2,777
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 Тогда вот это совсем непонятно 
 
45 else if (arr[objLocal]?.id!==data[openItemIndex]?.id){ 
          markMovieAsFavorite(objLocal) 
          console.log("dob") 
        } 
Как я понимаю, надо узнать, содержится ли в arr (вернее узнать, что не содержится) объект с id: data[openItemIndex]?.id. Так? 
Тогда  
if (! arr.find(el => el.id == data[openItemIndex].id) ) { 
 
И это непонятно. 
 markMovieAsFavorite(undefined) 
Зачем туда запихивать лишний элемент undefined? И потом везде таскать ?. 
 
Ну напишите вы чуть больше кода 
 
const markMovieAsFavorite = movieId => { 
    const a = [...favotireMoviesIds] 
    if (movieId) a.push(movieId) 
    localStorage.setItem('favorite-movies', JSON.stringify(a)); 
} 
 
А какой смысл хранить в localStorage все структуры вместе с текстовыми описаниями? Одних индексов не достаточно? По ним же всегда можно найти нужный объект. 
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось voraa, 13.12.2020 в 21:33.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				14.12.2020, 01:44
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Интересующийся 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 20.07.2020 
					
					
					
						Сообщений: 16
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 Большое спасибо, сделал немного по другому , без проверок, просто кнопку меняю через тернарный оператор, с помощью перебора массива который вы написали, ещё раз спасибо 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
 
 |  
  |