1313> [ !NOTE]
1414> Learn how to inject the ` bem ` prop in [ the next chapter] ( #adding-the-bem-helper-to-your-components )
1515
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
2017
2118``` jsx
2219function Acme ({ bem: { className, element } }) {
@@ -25,87 +22,67 @@ function Acme({ bem: { className, element } }) {
2522 < / div>
2623}
2724```
28- </td >
29- <td >
3025
3126``` html
3227<div class =" acme" >
3328 <h1 class =" acme__heading" >Hello</h1 >
3429</div >
3530```
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
4133
4234``` jsx
4335function Acme ({ bem }) {
4436 return < div className= {bem}> Hello< / div>
4537}
4638```
47- </td >
48- <td >
4939
5040``` html
5141<div class =" acme" >Hello</div >
5242```
53- </tr >
5443
55- <tr ><td colspan =2 >Adding block modifiers</td ></tr >
56- <tr >
57- <td >
44+ ### Adding block modifiers
5845
5946``` jsx
6047function Acme ({ bem: { block } }) {
61- const [on , setOn ] = useState (true );
48+ const [toggle , setToggle ] = useState (true );
6249 const onClick = useCallback (
63- () => setOn (current => ! current),
64- [setOn ],
50+ () => setToggle (current => ! current),
51+ [setToggle ],
6552 );
6653
67- return < div className= {block` ${ { on }} mod ` }>
54+ return < div className= {block` ${ { toggle }} always-enabled ` }>
6855 < button onClick= {onClick}> Toggle< / button>
6956 < / div>
7057}
7158```
72- </td >
73- <td >
7459
7560``` html
76- <div class =" acme acme--on acme--mod " />
61+ <div class =" acme acme--toggle acme--always-enabled " />
7762```
78- </tr >
7963
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
8366
8467``` jsx
8568function Acme ({ bem: { block } }) {
8669 return < div className= {mix` me-2 d-flex` }>
8770 < / div>
8871}
8972```
90- </td >
91- <td >
9273
9374``` html
9475<div class =" acme me-2 d-flex" >...</div >
9576```
96- </tr >
9777
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
10482
10583``` jsx
10684function 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` }/ >
10986}
11087
11188function Parent ({ bem: { className, element } }) {
@@ -114,68 +91,35 @@ function Parent({ bem: { className, element } }) {
11491 < / div>
11592}
11693```
117- </td >
118- <td >
11994
12095``` html
12196<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" />
12898</div >
12999```
130- </tr >
131100
132101
133- <tr ><td colspan =2 >Using elements with modifiers</td ></tr >
134- <tr >
135- <td >
102+ ### Using elements with modifiers
136103
137104``` jsx
138105function Acme ({ bem: { block, element } }) {
139106 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` } / >
152111 < / div>
153112}
154113```
155- </td >
156- <td >
157114
158115``` html
159116<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" />
172121</div >
173122```
174- </tr >
175-
176-
177- <tbody >
178- </table >
179123
180124## Adding the BEM helper to your components
181125
0 commit comments