Oleg
Timofey
как в formik убрать ошибку из поля?
Oleg
wheelEl.current.dispatchEvent(new KeyboardEvent('keydown', {
key: '16'
}));
вообще, event повешен так
useEffect(() => {
const wheelAction = (e) => {
wheelEl.current.dispatchEvent(new KeyboardEvent('keydown', {
// key: 'Shift',
keyCode: 16,
}));
// e.preventDefault();
// if (wheelEl.current.scrollLeft < scrollPos) {
// wheelEl.current.scrollLeft -= 50;
// } else {
// wheelEl.current.scrollLeft += 50;
// }
// // setScrollPos(wheelEl.current.scrollLeft);
// scrollPos = wheelEl.current.scrollLeft;
};
wheelEl.current.addEventListener('wheel', wheelAction, false);
return () => wheelEl.current.removeEventListener('wheel', wheelAction);
});
это правильно?
Denis
Oleg
Dmitry
что юзаете для виртуализации ?
Александр
Cenator 🐈
React-window
Vova
ребят, в одном компоненте может быть и редакс и дфолтный стейт?
Andrei
Andrei
откуда вообще такое мнение
Vladimir
Oleg
Александр
Vova
Разумеется
плохая практика всю локику держать в редаксе?
Mikhail
везде же.
в убунту в хроме ничего от зажатого шифта не менятся
Александр
Vova
каждый екшен впадло прокидывать, там открылась модалка
Александр
Вопрос был про стейт
Vova
зачем это глобально
Vova
это новый вопрос
Oleg
Александр
Vova
у меня есть стейт modalIsOpen на какой то там страничке, зачем мне это хранить в глобальном стейте в редаксе?
Vova
King
Vova
понял
🤴👷♂️🦸♂️🧚♀️
Подскажите как создавать новые ноды при получение нового значения из пропсов. Код элемента - https://jsfiddle.net/b46psn1L/
Это все работает. Но есть сайд эфекты - создается новое поле при любом клике на любую кнопку и значение берется из прошлых пропсов.
Viacheslav
Vova
и про порталы спасибо
Александр
Александр
Хотя Гугл найдёт
Igor
Так, теперь я с компа и задам еще раз вопрос но уже с подробной ошибкой
Igor
Использую create-react-app, react-test-renderer, пытаюсь написать тесты, но при запуске jest ошибка
Igor
Igor
Андрей Чайковский
Друзья, в styled можно как-то множественное наследование сделать?
Виталий
Коллеги,
вопрос по стэку TS React Redux.
Подскажите как по бест практис нужно прописывать типы экшнов в редьюсере?
Спрашиваю вот почему:
В тех примерах которые я нашел на сайте редакс приводится такая реализация:
Мы как бы принимаем что конкретный редьюсер будет работать исключительно с конкретными экшнами, и тип экшна указывается как юнион тип всех возможных входящих экшнов.
Но почему так? Ведь по факту в каждый редьюсер попадает каждый экшн, а следовательно строго говоря мой тип не соответствует действительности. Кроме того в любой момент может возникнуть ситуация такая что я в этом же редьюсере буду вынужден обратать какой-то новый экшн который задействован в нескольких редьюсерах. И что тогда придется городить кучу юнион типов? Это же неудобно? Есть может какой-то универсальный подход?
UPD
Примеры про которые я говорю взяты отсюда
https://redux.js.org/recipes/usage-with-typescript
https://codesandbox.io/s/w02m7jm3q7
King
Андрей Чайковский
King
Ага
Есть такой костыльный способ
Если не ошибаюсь, если привести в строку стайлед, мы получим класснейм
Можно сделать типа так:
className={'' + StyledComponent1 + StyledComponent2}
Kurzdor
Соооовааааа
King
King
Андрей Чайковский
Andrey
Позже попробую
ну тут скорее
const B = styled(A)
const C = styled(B)
Madiyar
Как вам redux-observable?
Mike
Composition > inheritance, все дела
Сергей
Всем привет. Такая проблема у меня. Хочу динамически подгружать модули. В общем, по виду, все работает. Для "добавления" reducer модуля использую replaceReducer, для добавления saga модуля использую
export function* rootSaga() {
yield all([fork(mainSaga)]);
yield takeLatest(ADD_NEW_SAGA, add_new_saga);
}
export function* add_new_saga({ payload: { saga } }) {
yield all([fork(saga)]);
}
Но вот в чем беда, не могу разобраться... Если я после подключении первого модуля вызываю dispatch, который "дергает" saga и в последствии меняю state, то ПОСЛЕ подгрузки второго модуля происходят dispatch сделанные в предыдущем модуле. При это saga не дерагется, просто откуда-то прилетают actions, которые были вызваны ранее... и именно в таком же кол-ве... Что можете посоветовать?
Сергей
выходит, что если я в перовом модуле, что-то добавил в state, то это же добавиться (в state первого модуля) при открытии второго модуля
Mike
А зачем делать yield all на массив из одного элемента?
Сергей
согласен, лишнее, но сути, все равно не меняет
Igor
я что-то туплю, как можно игнорировать первый элемент, который неиспользуется? А то варнинг в консоль сыпется
Mike
Я думал может хитрость какая
Mike
А по поводу вопроса, по логгируй первый модуль, мб он у тебя второй раз тоже перегружается заново
Mike
Иначе странно
Mike
И может ещё реплейс редьюсер себя плохо ведёт, попробуй на несколько сторов разбить
Сергей
если бы он перезагружался, то дергалось бы всё, что дергается при его первоначальной подгрузке - а так просто
Сергей
при этом в REDUX консоли хрома нету экшенов этих повторных, а консоль лог срабаывает в reducer первого модуля
Mike
Mike
Сергей
Тогда скорее всего в реплейс редьюсер дело, да
Ну я вот так делаю
let modules = [];
export function initModule({ saga, reducer: { name, reducer } }) {
if (modules.includes(name)) {
return;
}
store.dispatch(add_new_saga(saga));
store.asyncReducers[name] = reducer;
store.replaceReducer(createReducer(store.asyncReducers));
modules.push(name);
}
А в reducer корневом
export default function createReducer(asyncReducer) {
return combineReducers({
monitoring,
notifications,
global,
userSettings,
...asyncReducer,
});
}
Mike
Я сам никогда не юзал это, просто предполагаю, что там проблема. Несколькими сторами можно проверить, если на них сработает -- точно в этом дело
Сергей
Mike
Ну не реплейс редьюсер, а новый стор со своим
Mike
Если первые консоли не стригерятся -- дело в реплейс редьюсере
Cheslav
как в CRA без eject можно поменять папку начала сборки? хочется все в client перенести