Как правильно передать параметры URL-адреса секретаря компоненту реагента

Я создаю приложение на основе шаблона re-frame по умолчанию.

У меня есть следующий маршрут секретаря:

(defroute "/users/:id" []
  (re-frame/dispatch [:set-active-panel :user-panel])

Я хочу получить доступ к параметру id из URL-адреса в моем компоненте реагента. Единственный способ добиться этого, который я нашел, - установить его на db. Что-то вроде:

(defroute "/users/:id" [id]
  (re-frame/dispatch [:set-user-id id])
  (re-frame/dispatch [:set-active-panel :user-panel])

Это определенно загрязнит мою БД, и такой подход кажется мне странным, поскольку я писал что-то подобное в реакции (с реагировать-маршрутизатор):

<Route path="/user/:id" component={MyComponent}>
// object with params automatically attached as props to MyComponent

Итак, как правильно передать параметры URL-адреса секретаря компоненту-реагенту?

UPD: В комментариях есть ссылка на обсуждение на github этой проблемы. Одни относятся к установке параметров URL в db как к правильному способу. В любом случае, мне это не очень нравится. Это вызывает гораздо большую сложность (установка параметров, подписка на них, отмена). И мне не нравится думать о параметрах URL как о состоянии приложения. Есть какой-нибудь хак или что-то в этом роде?


person Glen Swift    schedule 19.07.2016    source источник
comment
@PiotrekBzdyl Я обновил свой вопрос. Если у вас есть какие-либо хаки, дайте мне знать, в любом случае спасибо.   -  person Glen Swift    schedule 27.07.2016
comment
@PiotrekBzdyl Можете ли вы добавить это как ответ. Я отмечу это как правильное, если ничего нового не появится в течение нескольких дней. Спасибо за помощь   -  person Glen Swift    schedule 27.07.2016
comment
Я переместил свои комментарии в ответ.   -  person Piotrek Bzdyl    schedule 27.07.2016


Ответы (2)


Обсуждение на https://github.com/gadfly361/regent-seed/issues/4, похоже, точно соответствует вашему сценарию, и я думаю, что этот подход следует философии «единой БД» переформирования, когда содержимое вашей БД определяет все состояние вашего приложения (включая панель и ее параметры).

Я бы сказал, что это вопрос веры в то, что одноатомная БД является правильным подходом или нет. Использование параметров пути напрямую (например, компонент Route читает их непосредственно из URL-адреса) похоже на написание компонента, который использует не атомную базу данных, а какой-то альтернативный источник данных (в данном случае URL-путь).

Можно сказать, что компонент Route делает именно то, что вы называете сложной логикой (подписывается на изменения пути и управляет состоянием другого компонента). В этом случае вы просто повторно используете существующий фрагмент кода из компонента Route вместо того, чтобы делать то же самое в своем коде, обновляя данные БД при изменении пути URL в соответствии с маршрутами секретаря.

person Piotrek Bzdyl    schedule 27.07.2016

данные доступны по URL-адресу вашего браузера

(.. js/window -location -pathname)

затем с помощью биди (мы используем биди и настойчивый вместо секретаря. например, -and-pushy/" rel="nofollow">как написано в блоге), затем

(bidi/match-route your-routes url)
person henryw374    schedule 28.07.2016