Vova
Vova
красавчик
Anonymous
Anonymous
за душу взяло
GG
Vova
ну так ливни
Vova
если тебе не нужен
Cyclone
Фолкс, мне нравятся функциональные компоненты и хуки, но как отличить mount от update? Мне нужно выполнять определённую логику только на изначальном отображении компонента.
Usecase: предзагруженная первая страница асихронного списка. Нужно проверить, есть в пропсах уже загруженный список, и если есть, то выводить его и не бежать на сервер. Иначе - отправиться на сервер.
Белка 🦊
Можешь смотреть, если переменная пустая
Белка 🦊
( равна первоначальному значению )
Белка 🦊
При этом условие записывается
Cyclone
Покрасивее хочется...
Cyclone
Потому что DidMount и DidUpdate - как раз решили бы вопрос, но нам предлагают вместо них useEffect... но получается, что с хуками я не могу добиться поведения, как в класс-компонентах.
artalar
Cyclone
Если передать в useEffect вторым аргументов пустой массив, получается по сути DidMount. Окей, а как теперь DidUpdate сделать?
artalar
Cyclone
Маз рандом)
что?
Eugene
Daniel
Daniel
ну да, это не обойти
Daniel
логику пересмотри
Daniel
прямым образом классы переносить не всегда верно
Cyclone
Да я с нуля пишу. )
Anonymous
👋
Daniel
Тем более тогда, должно быть проще)
Cyclone
Сейчас у меня получается, что я не могу отделить кейсы изначального открытия первой страницы и намеренного перехода к ней после другой страницы.
Cyclone
Ну кроме грязного хака типа устанавливать значение переменной initialRender = false...
Daniel
Если ты переходишь с другой страницы нужный компонет же анмаунтится?
Cyclone
Имел в виду переход в пагинаторе от страницы 2 к странице 1.
Карамультук
artalar
Cyclone
Сейчас примерно такое условие:
const [items, setItems] = React.useState(props.config.initialItems || []); // Через props могут передаваться изначальные item'ы - тогда не нужно сразу идти на сервер за данными
if (items.length == 0 || pageNumber !== 1) {
сходи на сервер, загрузи данные
}
Cyclone
И при этом условии работает всё, кроме кейса, когда я в пагинаторе переключился на страницу 2, а потом нахзад на страницу 1 - загрузка не происходит, потому что в items уже записаны данные.
Daniel
Cyclone
Получается, что мне нужно знать, это я сейчас изначально на странице 1 нахожусь, или это я на ней со старницы 2 вернулся...
Cyclone
да...
Daniel
Звучит как обычный механизм пагинации, попробуй логику ее в спецальный компонент или хук вынести. По идее тебе как раз нужен useEffect для такой ситуации с обработкой начального рендера
Cyclone
Anonymous
Поясните, плиз
Функция внутри useEffect будет вызываться только когда меняется props.page, да?
Карамультук
Карамультук
Поясните, плиз
Короче хранишь где нибудь список с данными которые нужно отображать, можно во вне, можно прям в стейте твоего компонента списка с пагинацией. Передаешь пропсом в него страницу. Чекаешь есть ли данные для этой страницы. Да - показываешь, нет - загружаешь.
Cheslav
как можно использовать и dangerouslySetInnerHTML и children?
Cheslav
нужно в тег p вставить текст с <br/>aми + span с onClick
Cyclone
Cyclone
Если в JS раскомментить // window.initialItems = []; - то это кейс, когда предзагруженных данных нет
Cyclone
Всё работает, кроме перехода со второй страницы на первую.
Daniel
мне кажется проблема в React.useState(props.initialItems || []) надо одно или другое выбрать
Daniel
консистенси больше
Cyclone
Eugen
а данные о пользователе который только что залогинился где можно хранить? В локал сторейдже?
Daniel
Daniel
лучше такие вещи в одном месте обрабатывать а не разносить
Daniel
потому что функционал по сути один
Yury
а это вообще нормально, что при обновлении хранилища редукса, ремаунтится компонент?
Yury
т.е. при использовании редукса практически отпадает смысл использования стейта?
G.
Cyclone
Сейчас нет, а чем это поможет?
Cyclone
У меня один реактовый компонент без вложенностей на обычной html странице (не spa). Redux, по-моему, тут ни к чему.
... ну, почти без вложенностей.
Cyclone
Стейт-менеджера нет
Daniel
и не нужен
Cyclone
Сделал через const [isInitialRender, setIsInitialRender] = React.useState(true);... 30 секунд заняло, работает, но фу буэ.
Dmytro
Всем привет есть вопрос
Делаем связку React + Laravel + авторизация через Google (G-Suite) есть пару вопросов как это все правильно организовать, нужна платная консультация по этому поводу. Кто может помочь ?
Daniel
Cyclone
С удовольствием перепишу на что-нибудь покрасивее.
Если есть предложения... =)
Daniel
G.
G.
Нужно на конкретном примере кода смотреть. Причины в любом случае есть)
Yury
я вообще заметил какоето странное поведение.
примерная структура проекта:
в рендере компонента App
содержится роутер
и вывод списка простого через map.
так вот при обновлении списка ремаунтится компонент из роутера
Yury
сейчас покажу
Yury
class App extends Component {
constructor(props) {
super(props);
this.state = {
testdata: [],
open: false,
connected: false,
};
}
componentDidMount() {
this.serverRequest =
axios
.get("/testdata")
.then((result) => {
this.setState({testdata: result.data});
});
}
render() {
const testitems = this.state.testdata.map((testitem, i) => {
return(
<SimpleAxiosGetItem key={i} testitem={testitem}/>
);
});
return (
<div>
<BrowserRouter>
<Suspense fallback={<div>Loading...</div>}>
<div>
<div>
<MenuBar/>
</div>
<div className={"workplace"}>
<Route path="/web/" exact component={() => <Ping websocket={this.socket}/>} />
</div>
</div>
</Suspense>
</BrowserRouter>
<div className={"workplace"}>
<div>
{testitems}
</div>
</div>
</div>
);
}
}
Yury
как то так
Yury
косяк в том, что при вызове this.setState({testdata: result.data}) ремаунтится компонент Ping
Deyl
Добрые вечер товарищи. Кто-нибудь делал таблицы из компонента Grid который в библиотеке react-virtualized? Я знаю что есть Table, но он не подходит, т.к. много колонок в таблице. Проблема в том что нужно прикрутить шапку к компоненту Grid, у меня получилось синхронизировать два скролла, но второй немного отстает от Grid скролла
Yury
class SimpleAxiosGetItem extends Component {
render() {
return (
<div key={this.key}>{this.props.testitem}</div>
)
}
}