質問するログイン新規登録

回答編集履歴

3

a

2018/04/02 04:19

投稿

HayatoKamono
HayatoKamono

スコア2415

answer CHANGED
@@ -12,4 +12,99 @@
12
12
  hash: '#the-hash',
13
13
  state: { fromDashboard: true }
14
14
  }}/>
15
+ ```
16
+
17
+ # 即席デモコード
18
+
19
+ ## デモ
20
+ ![イメージ説明](7b26063084b16bb5d0c34ad62118b0af.gif)
21
+
22
+ ## index.js
23
+ ```
24
+ import React from 'react';
25
+ import { render } from 'react-dom';
26
+ import { BrowserRouter, Route, Switch, Link } from 'react-router-dom';
27
+ import './styles.css';
28
+
29
+ const Detail = ({ location }) => {
30
+
31
+ return (
32
+ <div className={location.state.className}>Detail</div>
33
+ )
34
+ }
35
+
36
+ class UserList extends React.Component {
37
+
38
+ constructor(props) {
39
+ super(props);
40
+ this.state = {
41
+ users: [
42
+ { id: 1, name: 'a' }, //1
43
+ { id: 2, name: 'b' }, //2
44
+ { id: 3, name: 'c' }, //3
45
+ { id: 4, name: 'd' }, //1
46
+ { id: 5, name: 'e' }, //2
47
+ { id: 6, name: 'f' } //3
48
+ ]
49
+ }
50
+ }
51
+
52
+ render() {
53
+ return (
54
+ <ul>
55
+ {
56
+ this.state.users.map((user, index) => {
57
+ return (
58
+ <li key={user.id}>
59
+ <Link to={{
60
+ pathname: `detail/${user.id}`,
61
+ state: { className: `detail${index % 3 + 1}` }
62
+ }}>{user.name}</Link>
63
+ </li>
64
+ )
65
+ })
66
+ }
67
+ </ul>
68
+ )
69
+ }
70
+
71
+ }
72
+
73
+ render(
74
+ <BrowserRouter>
75
+ <Switch>
76
+ <Route path='/' exact component={UserList} />
77
+ <Route path='/detail/:id' component={Detail} />
78
+ </Switch>
79
+ </BrowserRouter>,
80
+ document.getElementById('root')
81
+ );
82
+
83
+ ```
84
+
85
+ ## styles.css
86
+ ```
87
+ ul li:nth-child(3n+1) {
88
+ background-color: #949CF6;
89
+ }
90
+
91
+ ul li:nth-child(3n+2) {
92
+ background-color: #F499A7;
93
+ }
94
+
95
+ ul li:nth-child(3n+3) {
96
+ background-color: #FFD89C;
97
+ }
98
+
99
+ .detail1 {
100
+ background-color: #949CF6;
101
+ }
102
+
103
+ .detail2 {
104
+ background-color: #F499A7;
105
+ }
106
+
107
+ .detail3 {
108
+ background-color: #FFD89C;
109
+ }
15
110
  ```

2

a

2018/04/02 04:19

投稿

HayatoKamono
HayatoKamono

スコア2415

answer CHANGED
@@ -4,9 +4,12 @@
4
4
 
5
5
  react-routerを使っているのであれば、Linkコンポーネントにはオブジェクトを渡せるので、その中のstateプロパティーで色なりクラス名を渡してあげて、遷移先の詳細画面コンポーネントに渡ってくる値を取り出してあげると良いと思います。
6
6
   
7
+ [https://github.com/ReactTraining/react-router/blob/master/packages/react-router-dom/docs/api/Link.md#to-object](https://github.com/ReactTraining/react-router/blob/master/packages/react-router-dom/docs/api/Link.md#to-object)
7
8
  ```
8
9
  <Link to={{
9
- pathname: '/detail',
10
+ pathname: '/courses',
11
+ search: '?sort=name',
12
+ hash: '#the-hash',
10
- state: { background: '#000000 }
13
+ state: { fromDashboard: true }
11
14
  }}/>
12
15
  ```

1

a

2018/04/02 03:42

投稿

HayatoKamono
HayatoKamono

スコア2415

answer CHANGED
@@ -1,3 +1,12 @@
1
1
  フィードリストの個々のリストをクリックすると、そのリストに紐づく詳細画面(Detailコンポーネント)が表示されるというものを想定して回答します。
2
2
 
3
- その場合であれば、単純にクリックされたリストの背景色、または背景色が定義されたクラス名をDetailコンポーネントのpropsで渡してあげて、Detailコンポーネントは渡された背景色、または、クラス名を使ってレンダーしてあげれば良いだけだと思います。
3
+ その場合であれば、単純にクリックされたリストの背景色、または背景色が定義されたクラス名をDetailコンポーネントのpropsで渡してあげて、Detailコンポーネントは渡された背景色、または、クラス名を使って自身をレンダーしてあげれば良いだけだと思います。
4
+
5
+ react-routerを使っているのであれば、Linkコンポーネントにはオブジェクトを渡せるので、その中のstateプロパティーで色なりクラス名を渡してあげて、遷移先の詳細画面コンポーネントに渡ってくる値を取り出してあげると良いと思います。
6
+  
7
+ ```
8
+ <Link to={{
9
+ pathname: '/detail',
10
+ state: { background: '#000000 }
11
+ }}/>
12
+ ```