You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					60 lines
				
				1.5 KiB
			
		
		
			
		
	
	
					60 lines
				
				1.5 KiB
			| 
								 
											4 years ago
										 
									 | 
							
								# Custom runtime generating example
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Runtime code generated by loader could be overridden by providing custom generator via `runtimeGenerator` option. 
							 | 
						||
| 
								 | 
							
								For example you can return React component preconfigured with imported symbol data instead of default [symbol instance](https://github.com/kisenka/svg-baker/blob/master/packages/svg-baker-runtime/src/symbol.js).
							 | 
						||
| 
								 | 
							
								 
							 | 
						||
| 
								 | 
							
								### [Demo](demo.html)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								### Config
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- [webpack.config.js](webpack.config.js)
							 | 
						||
| 
								 | 
							
								- [svg-to-icon-component-runtime-generator.js](svg-to-icon-component-runtime-generator.js)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								### Input
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- [main.jsx](main.jsx)
							 | 
						||
| 
								 | 
							
								- [icon.jsx](icon.jsx)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								This import:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```js
							 | 
						||
| 
								 | 
							
								import TwitterIcon from '../assets/twitter.svg';
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Will be generated to:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```js
							 | 
						||
| 
								 | 
							
								import React from 'react';
							 | 
						||
| 
								 | 
							
								import SpriteSymbol from 'svg-sprite-loader/runtime/symbol';
							 | 
						||
| 
								 | 
							
								import sprite from 'svg-sprite-loader/runtime/browser-sprite';
							 | 
						||
| 
								 | 
							
								import SpriteSymbolComponent from './icon.jsx';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const symbol = new SpriteSymbol({ /* symbol data */ });
							 | 
						||
| 
								 | 
							
								sprite.add(symbol);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export default class TwitterIcon extends React.Component {
							 | 
						||
| 
								 | 
							
								  render() {
							 | 
						||
| 
								 | 
							
								    return <SpriteSymbolComponent glyph="${symbol.id}" {...this.props} />;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								So when you import SVG, actually React component returns with configured glyph:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```js
							 | 
						||
| 
								 | 
							
								import TwitterIcon from '../assets/twitter.svg';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								render(
							 | 
						||
| 
								 | 
							
								  <div>
							 | 
						||
| 
								 | 
							
								    <TwitterIcon width="100" />
							 | 
						||
| 
								 | 
							
								    <TwitterIcon fill="red" style={{width: 300}} />
							 | 
						||
| 
								 | 
							
								    <TwitterIcon fill="blue" style={{width: 600}} />
							 | 
						||
| 
								 | 
							
								  </div>,
							 | 
						||
| 
								 | 
							
								  document.querySelector('.app')
							 | 
						||
| 
								 | 
							
								);
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								### Output
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- [build/main.js](build/main.js)
							 |