質問編集履歴

4

typescript code

2017/10/18 04:17

投稿

m0a
m0a

スコア708

test CHANGED
File without changes
test CHANGED
File without changes

3

エラーメッセージの追加

2017/10/18 04:17

投稿

m0a
m0a

スコア708

test CHANGED
File without changes
test CHANGED
@@ -9,10 +9,6 @@
9
9
  ``<BrowserRouter><Tag></BrowserRouter>`` という風にBrowserRouterの子要素のコンポーネントとして書かないと
10
10
 
11
11
  エラーが出てしまわないように `useRouter`フラグで `<Link>`と`<a>`を切り替えるような実装にしました。
12
-
13
-
14
-
15
-
16
12
 
17
13
 
18
14
 
@@ -73,3 +69,35 @@
73
69
  恐らく`context`を駆使してごちゃごちゃすればできそうな気もしますが、ちょっと触ったことがないですし、
74
70
 
75
71
  そもそももっと簡単に記述する方法があるかもしれず質問させていただきました。
72
+
73
+
74
+
75
+ ちなみにもしstorybookでそのまま<Link>を使おうとすると以下のエラーが出ます
76
+
77
+
78
+
79
+ ```
80
+
81
+ Invariant Violation: You should not use <Link> outside a <Router>
82
+
83
+ at invariant (http://localhost:6006/static/preview.bundle.js:6918:15)
84
+
85
+ at Link.render (http://localhost:6006/static/preview.bundle.js:52978:54)
86
+
87
+ at finishClassComponent (http://localhost:6006/static/preview.bundle.js:42252:31)
88
+
89
+ at updateClassComponent (http://localhost:6006/static/preview.bundle.js:42229:12)
90
+
91
+ at beginWork (http://localhost:6006/static/preview.bundle.js:42608:16)
92
+
93
+ at performUnitOfWork (http://localhost:6006/static/preview.bundle.js:44576:16)
94
+
95
+ at workLoop (http://localhost:6006/static/preview.bundle.js:44685:28)
96
+
97
+ at HTMLUnknownElement.callCallback (http://localhost:6006/static/preview.bundle.js:33302:14)
98
+
99
+ at Object.invokeGuardedCallbackDev (http://localhost:6006/static/preview.bundle.js:33341:16)
100
+
101
+ at invokeGuardedCallback (http://localhost:6006/static/preview.bundle.js:33198:27)
102
+
103
+ ```

2

タイトルの変更

2017/10/17 04:04

投稿

m0a
m0a

スコア708

test CHANGED
@@ -1 +1 @@
1
- react-routerのlinkコンポーネントとanchrの自動切り替えの方法につ
1
+ react-routerの<Link><a>の自動切り替え方法(もしくはそもそも書きが違う場合はご指摘ただきたく)
test CHANGED
File without changes

1

質問内容の改善

2017/10/17 03:57

投稿

m0a
m0a

スコア708

test CHANGED
File without changes
test CHANGED
@@ -1,6 +1,18 @@
1
1
  react用のコンポーネントの開発にstorybookを使っています。
2
2
 
3
- そこでreacto-router-domとの連携を考慮して以下のようなコー書きました。
3
+ そこでreacto-router-domとの連携を考慮して以下のようなコンポネント作りました。
4
+
5
+
6
+
7
+ storyboard上では以下のTagコンポーネントをテストするのに
8
+
9
+ ``<BrowserRouter><Tag></BrowserRouter>`` という風にBrowserRouterの子要素のコンポーネントとして書かないと
10
+
11
+ エラーが出てしまわないように `useRouter`フラグで `<Link>`と`<a>`を切り替えるような実装にしました。
12
+
13
+
14
+
15
+
4
16
 
5
17
 
6
18
 
@@ -52,10 +64,12 @@
52
64
 
53
65
 
54
66
 
55
- まずこの書き方正しいいう問題もあります、 なぜこういう書き方をしたかというとLinkコンポーネントはstorybookで動かないからですが
67
+ です出来れば、`<Tag>`自身が `<BrowserRouter>`子要素として設定されてるかど判定
56
68
 
57
- 切り替えにuseRouterを設定するのが若干面倒と考えています。
69
+ `<Link>`と`<a>`を切り替えるような挙動したいのです(一々`useRouterフラグ使いた`)
58
70
 
59
- 内部的にRouterの配下にあるか調べて自動的にLinkを使うか<a>を使うか選択させたいのですが
60
71
 
72
+
73
+ 恐らく`context`を駆使してごちゃごちゃすればできそうな気もしますが、ちょっと触ったことがないですし、
74
+
61
- どうすれいんでょうか?
75
+ そもそももっと簡単に記述る方法があるかもしず質問させてただきまた。