Skip to content

Commit ea396e0

Browse files
committed
Updated docs about the loop and child components.
1 parent 9ef21b6 commit ea396e0

File tree

1 file changed

+67
-12
lines changed

1 file changed

+67
-12
lines changed

README.md

Lines changed: 67 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ React CSS Modules implement automatic mapping of CSS modules. Every CSS class is
1616
- [webpack](#webpack)
1717
- [Browserify](#browserify)
1818
- [Extending Component Styles](#extending-component-styles)
19-
- [Styles Property](#styles-property)
19+
- [`styles` Property](#styles-property)
20+
- [Loops and Child Components](#loops-and-child-components)
2021
- [Decorator](#decorator)
2122
- [Options](#options)
2223
- [`allowMultiple`](#allowmultiple)
@@ -219,45 +220,99 @@ In this example, `table-custom-styles.css` selectively extends `table.css` (the
219220

220221
Refer to the [`UsingStylesProperty` example](https://github.com/gajus/react-css-modules-examples/tree/master/src/UsingStylesProperty) for an example of a working implementation.
221222

222-
### Styles Property
223+
### `styles` Property
223224

224225
Decorated components inherit `styles` property that describes the mapping between CSS modules and CSS classes.
225226

226-
`styles` property within the component itself is designed to be used only when `styleNames` cannot be used.
227+
```js
228+
class extends React.Component {
229+
render () {
230+
<div>
231+
<p styleName='foo'></p>
232+
<p className={this.props.styles.foo}></p>
233+
</div>;
234+
}
235+
}
236+
```
237+
238+
In the above example, `styleName='foo'` and `className={this.props.styles.foo}` are equivalent.
239+
240+
`styles` property is designed to enable component decoration of [Loops and Child Components](#loops-and-child-components).
241+
242+
### Loops and Child Components
227243

228-
`styleNames` cannot be used within a component to define styles of a `ReactElement` that will be generated by another component (https://github.com/gajus/react-css-modules/issues/11), e.g.
244+
`styleName` cannot be used to define styles of a `ReactElement` that will be generated by another component, e.g.
229245

230246
```js
231-
class extends React.Component {
247+
import React from 'react';
248+
import CSSModules from 'react-css-modules';
249+
import List from './List';
250+
import styles from './table.css';
251+
252+
class CustomList extends React.Component {
232253
render () {
233254
let itemTemplate;
234255

235256
itemTemplate = (name) => {
236-
return <li styleName='foo'>{name}</li>;
257+
return <li styleName='item-template'>{name}</li>;
237258
};
238259

239-
return <List itemTemplate={name} />;
260+
return <List itemTemplate={itemTemplate} />;
240261
}
241262
}
263+
264+
export default CSSModules(CustomList, styles);
242265
```
243266

244-
For that purpose, the decorated component inherits `styles` property that you can use just as a regular CSS Modules object. The earlier example can be therefore rewritten to:
267+
The above example will not work. `CSSModules` is used to decorate `CustomList` component. However, it is the `List` component that will render `itemTemplate`.
268+
269+
For that purpose, the decorated component inherits [`styles` property](#styles-property) that you can use just as a regular CSS Modules object. The earlier example can be therefore rewritten to:
245270

246271
```js
247-
class extends React.Component {
272+
import React from 'react';
273+
import CSSModules from 'react-css-modules';
274+
import List from './List';
275+
import styles from './table.css';
276+
277+
class CustomList extends React.Component {
248278
render () {
249279
let itemTemplate;
250280

251281
itemTemplate = (name) => {
252-
return <li styleName={this.props.styles.foo}>{name}</li>;
282+
return <li className={this.props.styles['item-template']}>{name}</li>;
253283
};
254284

255-
return <List itemTemplate={name} />;
285+
return <List itemTemplate={itemTemplate} />;
256286
}
257287
}
288+
289+
export default CSSModules(CustomList, styles);
258290
```
259291

260-
`styles` property works with ES6 classes and stateless function components.
292+
You can use `styleName` property within the child component if you decorate the child component using `CSSModules` before passing it to the rendering component, e.g.
293+
294+
```js
295+
import React from 'react';
296+
import CSSModules from 'react-css-modules';
297+
import List from './List';
298+
import styles from './table.css';
299+
300+
class CustomList extends React.Component {
301+
render () {
302+
let itemTemplate;
303+
304+
itemTemplate = (name) => {
305+
return <li styleName='item-template'>{name}</li>;
306+
};
307+
308+
itemTemplate = CSSModules(itemTemplate, styles);
309+
310+
return <List itemTemplate={itemTemplate} />;
311+
}
312+
}
313+
314+
export default CSSModules(CustomList, styles);
315+
```
261316

262317
### Decorator
263318

0 commit comments

Comments
 (0)