Oleg
Гугли NODE_PATH или вебпак алиасы
Чтобы не писать относительные пути
Vova
красавчик
Anonymous
Anonymous
за душу взяло
Vova
ну так ливни
Vova
если тебе не нужен
Cyclone
Фолкс, мне нравятся функциональные компоненты и хуки, но как отличить mount от update? Мне нужно выполнять определённую логику только на изначальном отображении компонента. Usecase: предзагруженная первая страница асихронного списка. Нужно проверить, есть в пропсах уже загруженный список, и если есть, то выводить его и не бежать на сервер. Иначе - отправиться на сервер.
Белка 🦊
Можешь смотреть, если переменная пустая
Белка 🦊
( равна первоначальному значению )
Белка 🦊
При этом условие записывается
Cyclone
Покрасивее хочется...
Cyclone
Потому что DidMount и DidUpdate - как раз решили бы вопрос, но нам предлагают вместо них useEffect... но получается, что с хуками я не могу добиться поведения, как в класс-компонентах.
Cyclone
Если передать в useEffect вторым аргументов пустой массив, получается по сути DidMount. Окей, а как теперь DidUpdate сделать?
Cyclone
Маз рандом) что?
Cyclone
ничего не передавать во втором аргументе
Всё равно вызывается при начальной загрузке.
Daniel
ну да, это не обойти
Daniel
логику пересмотри
Daniel
прямым образом классы переносить не всегда верно
Cyclone
Да я с нуля пишу. )
Anonymous
👋
Daniel
Тем более тогда, должно быть проще)
Cyclone
Сейчас у меня получается, что я не могу отделить кейсы изначального открытия первой страницы и намеренного перехода к ней после другой страницы.
Cyclone
Ну кроме грязного хака типа устанавливать значение переменной initialRender = false...
Daniel
Если ты переходишь с другой страницы нужный компонет же анмаунтится?
Cyclone
Имел в виду переход в пагинаторе от страницы 2 к странице 1.
Cyclone
Сейчас примерно такое условие: const [items, setItems] = React.useState(props.config.initialItems || []); // Через props могут передаваться изначальные item'ы - тогда не нужно сразу идти на сервер за данными if (items.length == 0 || pageNumber !== 1) { сходи на сервер, загрузи данные }
Cyclone
И при этом условии работает всё, кроме кейса, когда я в пагинаторе переключился на страницу 2, а потом нахзад на страницу 1 - загрузка не происходит, потому что в items уже записаны данные.
Cyclone
Получается, что мне нужно знать, это я сейчас изначально на странице 1 нахожусь, или это я на ней со старницы 2 вернулся...
Cyclone
да...
Daniel
Звучит как обычный механизм пагинации, попробуй логику ее в спецальный компонент или хук вынести. По идее тебе как раз нужен useEffect для такой ситуации с обработкой начального рендера
Anonymous
Поясните, плиз
Функция внутри useEffect будет вызываться только когда меняется props.page, да?
Карамультук
Поясните, плиз
Короче хранишь где нибудь список с данными которые нужно отображать, можно во вне, можно прям в стейте твоего компонента списка с пагинацией. Передаешь пропсом в него страницу. Чекаешь есть ли данные для этой страницы. Да - показываешь, нет - загружаешь.
Cheslav
как можно использовать и dangerouslySetInnerHTML и children?
Cheslav
нужно в тег p вставить текст с <br/>aми + span с onClick
Cyclone
Если в JS раскомментить // window.initialItems = []; - то это кейс, когда предзагруженных данных нет
Cyclone
Всё работает, кроме перехода со второй страницы на первую.
Daniel
мне кажется проблема в React.useState(props.initialItems || []) надо одно или другое выбрать
Daniel
https://codepen.io/anon/pen/GaZQvJ
Я бы обрабатывал начальные данные также как все остальные и не пытался их таким образом подкладывать
Daniel
консистенси больше
Cyclone
мне кажется проблема в React.useState(props.initialItems || []) надо одно или другое выбрать
Если не подали initialItems, то пустой массив, что здесь не так?
Cyclone
Я бы обрабатывал начальные данные также как все остальные и не пытался их таким образом подкладывать
Ну, в этом как раз и стоит задача. Чтобы при заходе на html-страницу айтемы первой страницы данных уже были отрисованы без дополнительного запроса на сервер.
Eugen
а данные о пользователе который только что залогинился где можно хранить? В локал сторейдже?
Daniel
лучше такие вещи в одном месте обрабатывать а не разносить
Daniel
потому что функционал по сути один
Yury
а это вообще нормально, что при обновлении хранилища редукса, ремаунтится компонент?
Yury
т.е. при использовании редукса практически отпадает смысл использования стейта?
Cyclone
Сейчас нет, а чем это поможет?
Cyclone
У меня один реактовый компонент без вложенностей на обычной html странице (не spa). Redux, по-моему, тут ни к чему. ... ну, почти без вложенностей.
G.
Сейчас нет, а чем это поможет?
от этого зависит как лучше решить твою задачу
Cyclone
Стейт-менеджера нет
Daniel
и не нужен
Cyclone
Сделал через const [isInitialRender, setIsInitialRender] = React.useState(true);... 30 секунд заняло, работает, но фу буэ.
Dmytro
Всем привет есть вопрос Делаем связку React + Laravel + авторизация через Google (G-Suite) есть пару вопросов как это все правильно организовать, нужна платная консультация по этому поводу. Кто может помочь ?
Cyclone
С удовольствием перепишу на что-нибудь покрасивее. Если есть предложения... =)
G.
т.е. при использовании редукса практически отпадает смысл использования стейта?
иногда локальный стейт удобнее, если он только в этом компоненте используется
Yury
иногда локальный стейт удобнее, если он только в этом компоненте используется
я не про удобство говорю... я говорю о том, что ремаунтится компонент по непонятным причинам. а когда компонент ремаунтится, то его сетйты обновляются
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> ) } }