feat: move from effector to virentia#25
Conversation
dima117
left a comment
There was a problem hiding this comment.
пока промежуточный результат, я не досмотрел два файла:
model/pages/projectmodel/pages/stat
| children: ReactNode; | ||
| } | ||
|
|
||
| const useIsOpen = (id: string) => useStoreMap($collapseState, (s) => Boolean(s[id])); |
There was a problem hiding this comment.
правильно ли понимаю, что раньше перерисовка была при изменении значения с конкретным ключом, а теперь будет всегда?
|
|
||
| return ( | ||
| <Button size="l" view="outlined" pin="circle-circle" onClick={toggleTheme}> | ||
| <Button size="l" view="outlined" pin="circle-circle" onClick={() => toggleTheme()}> |
| const href = link.path; | ||
| // useLink возвращает open с отложенным условным типом из-за дженерика T; | ||
| // на этом уровне payload всегда { params, query } | ||
| const open = link.open as (payload: { params: T; query?: Query }) => void; |
| import { UiTheme } from '@/types'; | ||
|
|
||
| export const $deps = createStore<StoreDependencies>(null as unknown as StoreDependencies); | ||
| export const $deps = store<StoreDependencies>(null as unknown as StoreDependencies); |
There was a problem hiding this comment.
по идее, этот стор (и весь этот файл) нужно выпилить и использовать контекст стм
| <ScopeProvider value={scope}> | ||
| <RouterProvider router={router}> | ||
| <ScopeProvider scope={scope}> | ||
| <RouterProvider router={router} history={historyAdapter(history)}> |
There was a problem hiding this comment.
можешь описать, какая логика работы RouterProvider?
выглядит, как будто он не только предоставляет контекст, но еще и делает какие-то сайд-эффекты
| createRouteView({ route: statRoute, view: Stat }), | ||
| ], | ||
| }); | ||
|
|
There was a problem hiding this comment.
со старым API выглядело как условный рендеринг компонентов, а сейчас выглядит как параметр, который непонятно как обрабатывается ((
можешь рассказать подробнее, как оно работает внутри и зачем здесь контейнер Routes?
| const featureQuery = controls.trackQuery<{ feature: string }>({ | ||
| parameters: { | ||
| safeParse: (query) => { | ||
| const feature = query.feature; |
There was a problem hiding this comment.
изменилась схема взаимодействия элементов модели:
- раньше источником состояния о выбранной фиче был
$featureCode, запускался явно черезloadFeatureFxи обновление url было явным сайд-эффектом - теперь источник истины о коде фичи — это роут
нужно вернуть старую схему
| export const projectRoute = createRoute<{ project?: string }>(); | ||
|
|
||
| // код проекта, дедуплицированный: меняется только при смене проекта, а не query | ||
| const $projectCode = projectRoute.params.map((params) => params.project ?? ''); |
There was a problem hiding this comment.
по идее, он и не должен меняться при смене query, т.к. берется из path
No description provided.