13
13
> [ !NOTE]
14
14
> Learn how to inject the ` bem ` prop in [ the next chapter] ( #adding-the-bem-helper-to-your-components )
15
15
16
- <table >
17
- <tr ><td colspan =2 >Simplest way to create a block with some elements</td ></tr >
18
- <tr >
19
- <td >
16
+ ### Simplest way to create a block with some elements
20
17
21
18
``` jsx
22
19
function Acme ({ bem: { className, element } }) {
@@ -25,87 +22,67 @@ function Acme({ bem: { className, element } }) {
25
22
< / div>
26
23
}
27
24
```
28
- </td >
29
- <td >
30
25
31
26
``` html
32
27
<div class =" acme" >
33
28
<h1 class =" acme__heading" >Hello</h1 >
34
29
</div >
35
30
```
36
- </td >
37
- </tr >
38
- <tr ><td colspan =2 >BEM helper as a shorthand if there are no elements</td ></tr >
39
- <tr >
40
- <td >
31
+
32
+ ### BEM helper as a shorthand if there are no elements
41
33
42
34
``` jsx
43
35
function Acme ({ bem }) {
44
36
return < div className= {bem}> Hello< / div>
45
37
}
46
38
```
47
- </td >
48
- <td >
49
39
50
40
``` html
51
41
<div class =" acme" >Hello</div >
52
42
```
53
- </tr >
54
43
55
- <tr ><td colspan =2 >Adding block modifiers</td ></tr >
56
- <tr >
57
- <td >
44
+ ### Adding block modifiers
58
45
59
46
``` jsx
60
47
function Acme ({ bem: { block } }) {
61
- const [on , setOn ] = useState (true );
48
+ const [toggle , setToggle ] = useState (true );
62
49
const onClick = useCallback (
63
- () => setOn (current => ! current),
64
- [setOn ],
50
+ () => setToggle (current => ! current),
51
+ [setToggle ],
65
52
);
66
53
67
- return < div className= {block` ${ { on }} mod ` }>
54
+ return < div className= {block` ${ { toggle }} always-enabled ` }>
68
55
< button onClick= {onClick}> Toggle< / button>
69
56
< / div>
70
57
}
71
58
```
72
- </td >
73
- <td >
74
59
75
60
``` html
76
- <div class =" acme acme--on acme--mod " />
61
+ <div class =" acme acme--toggle acme--always-enabled " />
77
62
```
78
- </tr >
79
63
80
- <tr ><td colspan =2 >Mixing the block with other classes</td ></tr >
81
- <tr >
82
- <td >
64
+
65
+ ### Mixing the block with other classes
83
66
84
67
``` jsx
85
68
function Acme ({ bem: { block } }) {
86
69
return < div className= {mix` me-2 d-flex` }>
87
70
< / div>
88
71
}
89
72
```
90
- </td >
91
- <td >
92
73
93
74
``` html
94
75
<div class =" acme me-2 d-flex" >...</div >
95
76
```
96
- </tr >
97
77
98
- <tr ><td colspan =2 >
99
- To mix a block with a parent element just pass the element name as `className`
100
- and it will be appended automatically
101
- </td ></tr >
102
- <tr >
103
- <td >
78
+ ### Mixing with parent block
79
+
80
+ To mix a block with a parent element just pass the element name as ` className `
81
+ and it will be appended automatically
104
82
105
83
``` jsx
106
84
function Child ({ bem: { block } }) {
107
- const mod = { active: true }
108
- return < div className= {block` ${ mod} ` .mix ` me-2` }/ >
85
+ return < div className= {block` ${ { active: true }} ` .mix ` me-2` }/ >
109
86
}
110
87
111
88
function Parent ({ bem: { className, element } }) {
@@ -114,68 +91,35 @@ function Parent({ bem: { className, element } }) {
114
91
< / div>
115
92
}
116
93
```
117
- </td >
118
- <td >
119
94
120
95
``` html
121
96
<div class =" parent" >
122
- <div class ="
123
- child
124
- parent__element
125
- child--active
126
- me2
127
- " />
97
+ <div class =" child parent__element child--active me2" />
128
98
</div >
129
99
```
130
- </tr >
131
100
132
101
133
- <tr ><td colspan =2 >Using elements with modifiers</td ></tr >
134
- <tr >
135
- <td >
102
+ ### Using elements with modifiers
136
103
137
104
``` jsx
138
105
function Acme ({ bem: { block, element } }) {
139
106
return < div className= {block}>
140
- < div class = {
141
- element` item ${ { selected: true }} me-2`
142
- }/ >
143
- < div class = {
144
- element` item ${ { variant: ' primary' }} `
145
- }/ >
146
- < div class = {
147
- element` item ${ [' theme-dark' ]} `
148
- }/ >
149
- < div class = {
150
- element` item` .mix ` d-flex`
151
- }/ >
107
+ < div class = {element` item ${ { selected: true }} me-2` } / >
108
+ < div class = {element` item ${ { variant: ' primary' }} ` } / >
109
+ < div class = {element` item ${ [' theme-dark' ]} ` } / >
110
+ < div class = {element` item` .mix ` d-flex` } / >
152
111
< / div>
153
112
}
154
113
```
155
- </td >
156
- <td >
157
114
158
115
``` html
159
116
<div class =" acme" >
160
- <div class ="
161
- acme__item acme__item--selected me-2
162
- " />
163
- <div class ="
164
- acme__item acme__item--variant-primary
165
- " />
166
- <div class ="
167
- acme__item acme__item--theme-dark
168
- " />
169
- <div class ="
170
- acme__item d-flex
171
- " />
117
+ <div class =" acme__item acme__item--selected me-2" />
118
+ <div class =" acme__item acme__item--variant-primary" />
119
+ <div class =" acme__item acme__item--theme-dark" />
120
+ <div class =" acme__item d-flex" />
172
121
</div >
173
122
```
174
- </tr >
175
-
176
-
177
- <tbody >
178
- </table >
179
123
180
124
## Adding the BEM helper to your components
181
125
0 commit comments