У меня есть приложение, в котором вы выбираете некоторые продукты (DIVS), которые меняют цвет границы (с состоянием). Я хотел бы знать, как я могу сохранить эти действия onClick, чтобы, когда люди нажимают на другую ссылку и возвращаются, выбираются те же DIV?
Я знаю, что могу использовать файлы cookie или сеансы, но как определить каждый DIV в React и сделать их автоматическим выбором, например, после обновления страницы? Как вам, ребята, это удается? Спасибо.
Сейчас пользуюсь студией Rekit. У них нет версии для реагирования в документации, но я последую вашему совету и посмотрю, как это пойдет. Большое тебе спасибо.





Если вы хотите сохранить состояние после перезагрузки, возможно, вам стоит взглянуть на HTML Web Storage.
В порядке предпочтения я бы использовал:
1) Если вы используете React 16.3 или более позднюю версию, используйте api контекста реакции 2) Если у вас не версия 16.3 или выше, вы можете использовать библиотеку, такую как redux или flux 3) вы можете использовать локальное хранилище HTML.
Вот дополнительная информация о Redux vs context api:
https://daveceddia.com/context-api-vs-redux/
Веб-хранилище наименее желательно, потому что оно не применяет никаких правил управления состоянием, как это делают другие варианты.
хотя вам все равно нужно сохранить свое хранилище в localStorage, чтобы оно длилось после полного обновления страницы.
Ну, это зависит от того, что именно он имеет в виду под «чтобы, когда люди нажимают на другую ссылку и возвращаются, выбираются те же DIV?». Если он имеет в виду навигацию на своем собственном сайте, ему не нужно хранить в localStorage.
Тоже правда. В случае использования Redux можно порекомендовать проверить npmjs.com/package/redux-persist и просто указать, что если фактическая постоянство при обновлении страницы не требуется (как если бы учитывалась только навигация по страницам), это можно было бы решить так же легко, как просто сохранить значения в состоянии higher order component, который затем передает свое состояние в качестве реквизита дочерним компонентам. Также я не рекомендую использовать Redux или React Context API для простых задач.
Я согласен, что HOC решит эту проблему, а redux-persist - отличный инструмент. Тем не менее, я думал, основываясь на формулировке вопроса в дополнение к тому факту, что OP не знает, какую версию реакции он использует, что HOC может быть слишком продвинутым по теме, но определенно заслуживает упоминания.
Вот пример с локальным хранилищем:
import React from 'react';
class App extends React.Component {
constructor(props) {
super(props);
this.state = { list: null };
}
onSearch = (e) => {
e.preventDefault();
const { value } = this.input;
if (value === '') {
return;
}
const cached = localStorage.getItem(value);
if (cached) {
this.setState({ list: JSON.parse(cached) });
return;
}
fetch('https://search?query=' + value)
.then(response => response.json())
.then(result => {
localStorage.setItem(value, JSON.stringify(result.list));
this.setState({ list: result.list });
});
}
render() {
return (
<div>
<form type = "submit" onSubmit = {this.onSearch}>
<input type = "text" ref = {node => this.input = node} />
<button type = "button">Search</button>
</form>
{
this.state.list &&
this.state.list.map(item => <div key = {item.objectID}>{item.title}</div>)
}
</div>
}
}
Судя по вашему вопросу, похоже, что вы
<div>React касается представления некоторых данных, но не решает, как вы разместите эти данные на странице. Похоже, вы хотите где-то сохранить список выбранные продукты, а затем снова загрузить этот список на страницу, когда пользователь обновится. API веб-хранилища может быть полезным, но файлы cookie и сеансы могут делать то же самое.
Тебе следует
componentDidMount для некоторого компонента), прочтите список из localstorage в свое состояниеrenderИтак, если вы загрузили список из одного из вариантов хранения в свое состояние как selectedProductIds, а ваш список продуктов находится в состоянии как products
isSelected = (product) => {
this.state.selectedProductIds.includes(product.id)
}
render() {
return <section>
{ this.state.products.map((product) =>
<div className = {this.isSelected(product) ? 'selected item' : 'item'}>
{product.name}
</div>
)}
</section>
}
Синхронизация состояния React с каким-либо другим механизмом хранения может стать довольно запутанной.
На какой версии React вы работаете?