6

re-frame default template の上にアプリを構築しています。

次の秘書ルートがあります。

(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])

これは間違いなく私のデータベースを汚染し、反応で( react-routerを使用して)次のようなものを書いていたので、そのようなアプローチは私にとって奇妙に思えます:

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

秘書の URL パラメータを試薬コンポーネントにブロードキャストする正しい方法は何ですか?

UPD:コメントには、この問題に関する github ディスカッションへのリンクがあります。正しい方法として、URL パラメータを db に設定することを参照してください。とにかく、私はそれがあまり好きではありません。これにより、はるかに複雑になります(パラメータの設定、サブスクライブ、設定解除)。また、URL パラメータをアプリの状態として考えるのは好きではありません。ハックか何かありますか?

4

2 に答える 2

1

https://github.com/gadfly361/reagent-seed/issues/4での議論は、あなたのシナリオを正確にカバーしているようです。このアプローチは、DB コンテンツが全体の状態を決定する再フレーム化の「単一 DB」哲学に従っていると思いますアプリケーションの (パネルとそのパラメーターを含む)。

単一のアトム DB が正しいアプローチであるかどうかは、信じる問題だと私は主張します。パス パラメーターを直接使用する ( RouteURL から直接読み取るコンポーネントのように) ことは、atom DB を使用せずに別のデータ ソース (この場合は URL パス) を使用するコンポーネントを作成するようなものです。

Routeこのコンポーネントは、複雑なロジック (パスの変更をサブスクライブし、別のコンポーネントの状態を管理する) と呼ばれるものを正確に実行すると言う人もいるかもしれません。Routeこの場合、秘書ルートに従って URL パスの変更に関する DB データを更新するコードで同じことを行うのではなく、コンポーネントから既存のコードを再利用するだけです。

于 2016-07-27T14:48:38.357 に答える
1

データはブラウザの URL から入手できます

(.. js/window -location -pathname)

次にbidiを使用します(秘書の代わりにbidiとpussyを使用します。たとえば、ブログとして

(bidi/match-route your-routes url)
于 2016-07-28T13:13:10.250 に答える