Таймураз
Не говоря о том, что с лайфсайклом реакта можно немного обосраться, если у тебя императивное состояние на клиенте
Daniil
Ну и насколько помню от реакта там мало, тк не все лайфсайклы там жопа
Таймураз
Daniil
Хоть как - то. Но пару раз в ногу стреляло конечно.
Daniil
ну и хз еще как там щас с хуками будет все. Например тот же конструктор
Таймураз
с хуками все намного проще
Daniil
хм, ну окей, надо будет глянуть
Таймураз
хм, ну окей, надо будет глянуть
Я сейчас могу переписывать текущее приложение как раз таки за счет хуков, так как с хоками отрефакторить то, что было раньше- практически невозможно
Daniil
хз шо там за кейс с хоками был, но вроде проблем в рамках сср не испытывал с ними
Таймураз
Хуки- то же состояние каждого компонента, только в более декларативном виде, что позволяет лучше композировать логику
Таймураз
Daniil
понял
Daniil
да и не стоит оно того скорее всего. Экспа с кастом сср конечно заебца, но нет
Daniil
шо там гугелы и яндексы все еще не могут в изоморфные?
アレクサンダー・バキマトフ
гугел уже вроде как могет а яндекс как всегда)
Kostya
так что забить на реакт и какойто PUG использовать? хочется реактивным сделать его чтоб развивать его?
Daniil
Не, когда тестили - не мог, пару месяцев назад точно
Daniil
А может и мог, просто хуево отображался по сравнению с сср и потом с пререндером.
Andrei
всем привет. Такой интересный вопрос. использую функциональные компоненты с хуками и наверх накручен reselect. при использовании useSelector- он вызывает ререндер страницы при любом типе действий( связанных или нет со стором)( проверял линки- каждый раз создается новые селектори возращается новая копия данных) при использовании createSelector из reselect-этот баг был пофикшен, однако теперь, при измении стора( использую immutable js), мой селектор не обновляется и данные остаются не актуальными. вот код сниппет
import {createSelector} from "reselect";
const getZoomer = (state)=> state.zoomer;
const zoomer = createSelector(getZoomer, state => state);
Adv0cat
Denis
Andrei
Буду рад любой помощи, либо вариантам как обойти useSelector, который создаёт постоянно новую Линка и ререндерет компоненту
Adv0cat
На крайняк, у тебя бы был этот же селектор но в виде чистой функции, которая принимает стейт и выдает нужные данные
Andrei
неа, я использовал useSelector хук внутри функциональной компоненты
Adv0cat
Andrei
коннект и mapstatetoprops
Adv0cat
Вооот, это решит твою проблему ререндера компоненты
Andrei
все самое новое-хорошо забытое старое?
Adv0cat
Ну дык)))
Adv0cat
Если ты считал что-то в селекторе, то чтобы сделать момоизацию, которую делает реселект, просто добавь новое поле и пересчитыва его сам и сохраняй в нем калькулированные данные 🙂
Мирослав
привет
Sheldhur
Мирослав
в CRA что имеет больший приоритет — .env или process environent?
Andrei
бред, нахрена вводить было хуки в 16.7, чтобы люди мучались с вечным перерендером. я использую расчеты внутри редюсера, но это происходит примерно так:
newScale = Math.max(Math.min(newScale, maxScale), minScale);
if(newScale === state.scale){
return state;
}
// find the ratio of the new scale
const ratio = newScale / oldScale;
const realX = zoomCenter.x - state.translateX;
const realY = zoomCenter.y - state.translateY;
let newTranslateX = -1 * (ratio * realX - zoomCenter.x);
let newTranslateY = -1 * (ratio * realY - zoomCenter.y);
const coords = checkTranslateRanges(newScale, state.container, {newTranslateX, newTranslateY});
return Map(state)
.set('scale',newScale)
.set('translateY',coords.newTranslateY)
.set('translateX',coords.newTranslateX)
.toJS();
ничего здесь не сохраняет свою линку и не должно мне дурить мозг. реселект работает, как я вычитал и посмотреть по принципу shallowEqual, но почему-то его это не устраивает
Sheldhur
еще один рисователь реактом
Andrei
useMemo
если ты про компоненту здесь- не помогает, так как изменение линки селектора внутри данной компоненты- его все равно обновляет, а если мемо использовать на селектор- то это зачем?)
Andrei
еще один рисователь реактом
рисую интерактивую карту для выбора места, использование зумов стандартных- не рабочий вариант, так как там нужна своя логика, с тултипами и легендами
Adv0cat
бред, нахрена вводить было хуки в 16.7, чтобы люди мучались с вечным перерендером. я использую расчеты внутри редюсера, но это происходит примерно так:
newScale = Math.max(Math.min(newScale, maxScale), minScale);
if(newScale === state.scale){
return state;
}
// find the ratio of the new scale
const ratio = newScale / oldScale;
const realX = zoomCenter.x - state.translateX;
const realY = zoomCenter.y - state.translateY;
let newTranslateX = -1 * (ratio * realX - zoomCenter.x);
let newTranslateY = -1 * (ratio * realY - zoomCenter.y);
const coords = checkTranslateRanges(newScale, state.container, {newTranslateX, newTranslateY});
return Map(state)
.set('scale',newScale)
.set('translateY',coords.newTranslateY)
.set('translateX',coords.newTranslateX)
.toJS();
ничего здесь не сохраняет свою линку и не должно мне дурить мозг. реселект работает, как я вычитал и посмотреть по принципу shallowEqual, но почему-то его это не устраивает
а попробуй округлить до целых, вот в тупую, и посмотри, перерендеривает тебе или нет)))
Andrei
😯 сейчас
Andrei
Adv0cat
Paul
привет всем. ребят, подскажите плз, как правильно поступить -- я хочу сделать простенькую landing page для себя, react/material. документацию по реакту я осилил и общую концепцию понял. посмотрел несколько туториалов -- везде разный подход. кто-то просто верстку режет на компоненты, кто-то пользуется готовыми библиотеками компонентов (некоторые уже depreacted). не хочу велосипеды изобретать или вникать в подход, который уже не используется, поэтому вопрос такой -- какой путь стандартный на сегодня?
Andrei
const coords = checkTranslateRanges(newScale, state.container, {newTranslateX, newTranslateY});
console.log('recalculate');
return Map(state)
.set('scale',Math.round(newScale))
.set('translateY',Math.round(coords.newTranslateY))
.set('translateX',Math.round(coords.newTranslateX))
.toJS();
Мирослав
Мирослав
как то заигнорить, например
Sheldhur
почитать документацию
Adv0cat
const coords = checkTranslateRanges(newScale, state.container, {newTranslateX, newTranslateY});
console.log('recalculate');
return Map(state)
.set('scale',Math.round(newScale))
.set('translateY',Math.round(coords.newTranslateY))
.set('translateX',Math.round(coords.newTranslateX))
.toJS();
Ну хрен его знает)) Единственное что мне помагает в таких случаях начать воспроизводить такой эффект с нуля, ну т.е. создаешь новый компонент, в нем минимальный код, который повторяет твою ситуцию с рекалькуляцией и пробуешь сделать так, чтобы у тебя все нормально заработало)) И анализируешь, где бяда)
Adv0cat
const coords = checkTranslateRanges(newScale, state.container, {newTranslateX, newTranslateY});
console.log('recalculate');
return Map(state)
.set('scale',Math.round(newScale))
.set('translateY',Math.round(coords.newTranslateY))
.set('translateX',Math.round(coords.newTranslateX))
.toJS();
Ну или как я уже предложил, мапТуПропс, скучно, банально, ну а шо делать, если леньки разбираться и копаться)
Danila
Dmitriy
Где глянуть конфиги линтера что в CRA зашиты?
Andrei
Adv0cat
Dmitriy
Adv0cat
вот это не работает, а с useSelector работает
буду копать
https://codesandbox.io/s/reactredux-qylcg
Кажется я понял твою ошибку... По-моему ты воспринимаешь реселект, как что-то, что уже привязанное к редаксу, хотя по сути, реселект это просто обертка над селекторами, т.е. почти такая же чистая функция над чистыми функциями, только с возможностью запомнить данные и не пересчитывать стейт заново.
В том примере что ты скинул, ты просто взял функцию и передал её в компонент, как вроде бы ты просто написал <h1>{() => ()}</h1>
Andrei
есть вариант как пофиксить?
Артем
Ребята, а реакт может работать с сокетным соединением?
Andrei
Rrr
Артем
Мне просто надо: я отправляю запрос,и потом жду пока мне сервер через N-ое количество времени вернет что-то обратно,с помошью чего можно реализовать?
Артем
может кто что посоветовать для работы с реактом?
DjKaira
Ivan
Anonymous
Привет. Есть что-то типа Mobx-state-tree на хуках?
Adv0cat
Мне просто надо: я отправляю запрос,и потом жду пока мне сервер через N-ое количество времени вернет что-то обратно,с помошью чего можно реализовать?
Можно сделать просто, а можно заморочится. Просто - это опрашивать сервер гет запросами не сделал ли он ничо там, а щас, а щас, а щас)) Заморочится, это установить WebSocket'ное соединение с сервером и держать с ним коннект, но ты должен понимать, что это всем придется держать коннект, и если у тебя предполагается очень большой поток людей, то тебе помимо прочности сервера еще коннекты к сокету держать нужно 😉
Артем
Adv0cat
Andrei
Adv0cat
типо через каждые пару секунд отправлять гет запрос?)
Потому что тебе держать коннекты нужно только, если ты собираешся часто и много инфы слать, а если ради одного запроса держать целый коннект, то там беку придется попотеть)) Да, по сути ты таким образом ddos устраиваешь собственноручно, но все таки есть нюансы во всех подходах))
Adv0cat
Iv
Andrei