├── .babelrc
├── .gitignore
├── .prettierrc
├── package.json
├── readme.md
├── snippets
├── CommentBigBlock.sublime-snippet
├── anonymousFunction.sublime-snippet
├── bindThis.sublime-snippet
├── classConstructor.sublime-snippet
├── componentDidMount.sublime-snippet
├── componentDidUpdate.sublime-snippet
├── componentProps.sublime-snippet
├── componentRender.sublime-snippet
├── componentSetStateFunc.sublime-snippet
├── componentSetStateObject.sublime-snippet
├── componentState.sublime-snippet
├── componentWillMount.sublime-snippet
├── componentWillReceiveProps.sublime-snippet
├── componentWillUnmount.sublime-snippet
├── componentWillUpdate.sublime-snippet
├── consoleAssert.sublime-snippet
├── consoleClear.sublime-snippet
├── consoleCount.sublime-snippet
├── consoleDir.sublime-snippet
├── consoleError.sublime-snippet
├── consoleGroup.sublime-snippet
├── consoleGroupEnd.sublime-snippet
├── consoleInfo.sublime-snippet
├── consoleLog.sublime-snippet
├── consoleLogObject.sublime-snippet
├── consoleTime.sublime-snippet
├── consoleTimeEnd.sublime-snippet
├── consoleTrace.sublime-snippet
├── consoleWarn.sublime-snippet
├── createContext.sublime-snippet
├── createRef.sublime-snippet
├── describeBlock.sublime-snippet
├── destructProps.sublime-snippet
├── destructState.sublime-snippet
├── destructingArray.sublime-snippet
├── destructingObject.sublime-snippet
├── emptyState.sublime-snippet
├── exportAs.sublime-snippet
├── exportDefault.sublime-snippet
├── exportDefaultFunction.sublime-snippet
├── exportDestructing.sublime-snippet
├── exportGraphQL.sublime-snippet
├── exportNamedFunction.sublime-snippet
├── forEach.sublime-snippet
├── forIn.sublime-snippet
├── forOf.sublime-snippet
├── forwardRef.sublime-snippet
├── getDerivedStateFromProps.sublime-snippet
├── getSnapshotBeforeUpdate.sublime-snippet
├── graphQLForComponent.sublime-snippet
├── hocComponent.sublime-snippet
├── hocComponentWithRedux.sublime-snippet
├── import.sublime-snippet
├── importAs.sublime-snippet
├── importDestructing.sublime-snippet
├── importEverything.sublime-snippet
├── importNoModuleName.sublime-snippet
├── importPropTypes.sublime-snippet
├── importReact.sublime-snippet
├── importReactDOM.sublime-snippet
├── importReactPropTypes.sublime-snippet
├── importReactRouter.sublime-snippet
├── importReactmemo.sublime-snippet
├── importReactmemoPropTypes.sublime-snippet
├── importreduxstatement.sublime-snippet
├── itBlock.sublime-snippet
├── mappingToProps.sublime-snippet
├── method.sublime-snippet
├── namedFunction.sublime-snippet
├── promise.sublime-snippet
├── propTypeAny.sublime-snippet
├── propTypeArray.sublime-snippet
├── propTypeArrayOf.sublime-snippet
├── propTypeArrayOfRequired.sublime-snippet
├── propTypeArrayRequired.sublime-snippet
├── propTypeBool.sublime-snippet
├── propTypeBoolRequired.sublime-snippet
├── propTypeElement.sublime-snippet
├── propTypeElementRequired.sublime-snippet
├── propTypeEnum.sublime-snippet
├── propTypeEnumRequired.sublime-snippet
├── propTypeFunc.sublime-snippet
├── propTypeFuncRequired.sublime-snippet
├── propTypeInstanceOf.sublime-snippet
├── propTypeInstanceOfRequired.sublime-snippet
├── propTypeNode.sublime-snippet
├── propTypeNodeRequired.sublime-snippet
├── propTypeNumber.sublime-snippet
├── propTypeNumberRequired.sublime-snippet
├── propTypeObject.sublime-snippet
├── propTypeObjectOf.sublime-snippet
├── propTypeObjectOfRequired.sublime-snippet
├── propTypeObjectRequired.sublime-snippet
├── propTypeOneOfType.sublime-snippet
├── propTypeOneOfTypeRequired.sublime-snippet
├── propTypeShape.sublime-snippet
├── propTypeShapeRequired.sublime-snippet
├── propTypeString.sublime-snippet
├── propTypeStringRequired.sublime-snippet
├── propertyGet.sublime-snippet
├── propertyset.sublime-snippet
├── reactArrowFunctionComponent.sublime-snippet
├── reactArrowFunctionComponentWithPropTypes.sublime-snippet
├── reactClassCompoment.sublime-snippet
├── reactClassCompomentPropTypes.sublime-snippet
├── reactClassCompomentRedux.sublime-snippet
├── reactClassExportComponent.sublime-snippet
├── reactClassExportComponentWithPropTypes.sublime-snippet
├── reactClassExportPureComponent.sublime-snippet
├── reactClassPureComponent.sublime-snippet
├── reactClassPureComponentWithPropTypes.sublime-snippet
├── reactFunctionMemoComponent.sublime-snippet
├── reactFunctionMemoComponentWithPropTypes.sublime-snippet
├── reactFunctionalComponent.sublime-snippet
├── reactFunctionalComponentWithPropTypes.sublime-snippet
├── reactFunctionalExportComponent.sublime-snippet
├── reactNativeArrowFunctionComponent.sublime-snippet
├── reactNativeClassComponentRedux.sublime-snippet
├── reactNativeComponent.sublime-snippet
├── reactNativeComponentExport.sublime-snippet
├── reactNativeComponentWithStyles.sublime-snippet
├── reactNativeImport.sublime-snippet
├── reactNativePureComponent.sublime-snippet
├── reactNativePureComponentExport.sublime-snippet
├── reactNativeStyles.sublime-snippet
├── reduxAction.sublime-snippet
├── reduxConst.sublime-snippet
├── reduxReducer.sublime-snippet
├── reduxSelector.sublime-snippet
├── setInterval.sublime-snippet
├── setTimeOut.sublime-snippet
├── setupReactComponentTestWithRedux.sublime-snippet
├── setupReactNativeTest.sublime-snippet
├── setupReactNativeTestWithRedux.sublime-snippet
├── setupReactTest.sublime-snippet
├── shouldComponentUpdate.sublime-snippet
├── staticPropTpyes.sublime-snippet
├── testBlock.sublime-snippet
├── useCallback.sublime-snippet
├── useContext.sublime-snippet
├── useDebugValue.sublime-snippet
├── useEffect.sublime-snippet
├── useImperativeHandle.sublime-snippet
├── useLayoutEffect.sublime-snippet
├── useMemo.sublime-snippet
├── useReducer.sublime-snippet
├── useRef.sublime-snippet
└── useState.sublime-snippet
├── src
├── index.js
└── snippets.json
└── yarn.lock
/.babelrc:
--------------------------------------------------------------------------------
1 | {
2 | "presets": ["@babel/preset-env"]
3 | }
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | /node_modules
2 | .DS_Store
--------------------------------------------------------------------------------
/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "trailingComma": "all",
3 | "tabWidth": 2,
4 | "semi": true,
5 | "singleQuote": true
6 | }
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "sublime-es7-javascript-react-snippets",
3 | "version": "1.0.1",
4 | "description": "Extension for Javascript/React snippets with search supporting ES7 and babel features",
5 | "main": "src/index.js",
6 | "scripts": {
7 | "test": "echo \"Error: no test specified\" && exit 1",
8 | "generate": "babel-node src/index.js",
9 | "dev": "nodemon --exec babel-node src/index.js"
10 | },
11 | "keywords": [
12 | "Javascript",
13 | "snippets",
14 | "react",
15 | "babel"
16 | ],
17 | "author": "Lasse T.",
18 | "license": "ISC",
19 | "devDependencies": {
20 | "@babel/core": "^7.4.4",
21 | "@babel/node": "^7.2.2",
22 | "@babel/preset-env": "^7.4.4",
23 | "babel-preset-env": "^1.7.0",
24 | "babel-register": "^6.26.0",
25 | "fs": "^0.0.1-security",
26 | "nodemon": "^1.19.0"
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/readme.md:
--------------------------------------------------------------------------------
1 | # Sublime ES7 React/Redux/React-Native/JS snippets (for JS and TS)
2 |
3 | This Sublime extension ports the excellent and popular snippets collection from the **["VS Code ES7 React/Redux/React-Native/JS snippets"](https://github.com/dsznajder/vscode-es7-javascript-react-snippets)** to Sublime. The snippets from the VS Code extension are located in `scr/snippets.json`, the script that converts the snippets to Sublime snippet format is in `src/index.js` and the finished Sublime snippets are in `snippets/` folder. Snippets work for both typescript and javascript.
4 |
5 | Also note, all `{ PureComponent }` or `{ Component }` have been replaced with `...extends React.PureComponent` or `...extends React.Component`.
6 |
7 | The are in total 148
8 |
9 | ## Installation
10 |
11 | Install via Package Control.
12 |
13 | - Open the Command Palette via `Ctrl/⌘+Shift+p`
14 | - Select Package Control: Install Package
15 | - Search for `Sublime ES7 React/Redux/React-Native/JS snippets` and press ↲ Enter
16 |
17 | ## Snippet information copy/pasted from: ["VS Code ES7 React/Redux/React-Native/JS snippets"](https://github.com/dsznajder/vscode-es7-javascript-react-snippets)
18 |
19 | Every space inside `{ }` and `( )` means that this is pushed into next line :)
20 | `$` represent each step after `tab`.
21 |
22 | ## Basic Methods
23 |
24 | | Prefix | Method |
25 | | ------: | --------------------------------------------------- |
26 | | `imp→` | `import moduleName from 'module'` |
27 | | `imn→` | `import 'module'` |
28 | | `imd→` | `import { destructuredModule } from 'module'` |
29 | | `ime→` | `import * as alias from 'module'` |
30 | | `ima→` | `import { originalName as aliasName} from 'module'` |
31 | | `exp→` | `export default moduleName` |
32 | | `exd→` | `export { destructuredModule } from 'module'` |
33 | | `exa→` | `export { originalName as aliasName} from 'module'` |
34 | | `enf→` | `export const functionName = (params) => { }` |
35 | | `edf→` | `export default (params) => { }` |
36 | | `met→` | `methodName = (params) => { }` |
37 | | `fre→` | `arrayName.forEach(element => { }` |
38 | | `fof→` | `for(let itemName of objectName { }` |
39 | | `fin→` | `for(let itemName in objectName { }` |
40 | | `anfn→` | `(params) => { }` |
41 | | `nfn→` | `const functionName = (params) => { }` |
42 | | `dob→` | `const {propName} = objectToDescruct` |
43 | | `dar→` | `const [propName] = arrayToDescruct` |
44 | | `sti→` | `setInterval(() => { }, intervalTime` |
45 | | `sto→` | `setTimeout(() => { }, delayTime` |
46 | | `prom→` | `return new Promise((resolve, reject) => { }` |
47 | | `cmmb→` | `comment block` |
48 | | `cp→` | `const { } = this.props` |
49 | | `cs→` | `const { } = this.state` |
50 |
51 | ## React
52 |
53 | | Prefix | Method |
54 | | ----------: | ----------------------------------------------------------------------------------- |
55 | | `imr→` | `import React from 'react'` |
56 | | `imrd→` | `import ReactDOM from 'react-dom'` |
57 | | `imrc→` | `import React, { Component } from 'react'` |
58 | | `imrcp→` | `import React, { Component } from 'react' & import PropTypes from 'prop-types'` |
59 | | `imrpc→` | `import React, { PureComponent } from 'react'` |
60 | | `imrpcp→` | `import React, { PureComponent } from 'react' & import PropTypes from 'prop-types'` |
61 | | `imrm→` | `import React, { memo } from 'react'` |
62 | | `imrmp→` | `import React, { memo } from 'react' & import PropTypes from 'prop-types'` |
63 | | `impt→` | `import PropTypes from 'prop-types'` |
64 | | `imrr→` | `import { BrowserRouter as Router, Route, Link } from 'react-router-dom'` |
65 | | `redux→` | `import { connect } from 'react-redux'` |
66 | | `rconst→` | `constructor(props) with this.state` |
67 | | `rconc→` | `constructor(props, context) with this.state` |
68 | | `est→` | `this.state = { }` |
69 | | `cwm→` | `componentWillMount = () => { }` DEPRECATED!!! |
70 | | `cdm→` | `componentDidMount = () => { }` |
71 | | `cwr→` | `componentWillReceiveProps = (nextProps) => { }` DEPRECATED!!! |
72 | | `scu→` | `shouldComponentUpdate = (nextProps, nextState) => { }` |
73 | | `cwup→` | `componentWillUpdate = (nextProps, nextState) => { }` DEPRECATED!!! |
74 | | `cdup→` | `componentDidUpdate = (prevProps, prevState) => { }` |
75 | | `cwun→` | `componentWillUnmount = () => { }` |
76 | | `gdsfp→` | `static getDerivedStateFromProps(nextProps, prevState) { }` |
77 | | `gsbu→` | `getSnapshotBeforeUpdate = (prevProps, prevState) => { }` |
78 | | `ren→` | `render() { return( ) }` |
79 | | `sst→` | `this.setState({ })` |
80 | | `ssf→` | `this.setState((state, props) => return { })` |
81 | | `props→` | `this.props.propName` |
82 | | `state→` | `this.state.stateName` |
83 | | `rcontext→` | `const ${1:contextName} = React.createContext()` |
84 | | `cref→` | `this.${1:refName}Ref = React.createRef()` |
85 | | `fref→` | `const ref = React.createRef()` |
86 | | `bnd→` | `this.methodName = this.methodName.bind(this)` |
87 |
88 | ## React Hooks
89 |
90 | - All hooks from [official docs](https://reactjs.org/docs/hooks-reference.html) are added with hook name prefix.
91 |
92 | ## React Native
93 |
94 | | Prefix | Method |
95 | | ---------: | -------------------------------------- |
96 | | `imrn→` | `import { $1 } from 'react-native'` |
97 | | `rnstyle→` | `const styles = StyleSheet.create({})` |
98 |
99 | ## Redux
100 |
101 | | Prefix | Method |
102 | | -----------: | ------------------------- |
103 | | `rxaction→` | `redux action template` |
104 | | `rxconst→` | `export const $1 = '$1'` |
105 | | `rxreducer→` | `redux reducer template` |
106 | | `rxselect→` | `redux selector template` |
107 |
108 | ## PropTypes
109 |
110 | | Prefix | Method |
111 | | --------: | ---------------------------------------- |
112 | | `pta→` | `PropTypes.array` |
113 | | `ptar→` | `PropTypes.array.isRequired` |
114 | | `ptb→` | `PropTypes.bool` |
115 | | `ptbr→` | `PropTypes.bool.isRequired` |
116 | | `ptf→` | `PropTypes.func` |
117 | | `ptfr→` | `PropTypes.func.isRequired` |
118 | | `ptn→` | `PropTypes.number` |
119 | | `ptnr→` | `PropTypes.number.isRequired` |
120 | | `pto→` | `PropTypes.object` |
121 | | `ptor→` | `PropTypes.object.isRequired` |
122 | | `pts→` | `PropTypes.string` |
123 | | `ptsr→` | `PropTypes.string.isRequired` |
124 | | `ptnd→` | `PropTypes.node` |
125 | | `ptndr→` | `PropTypes.node.isRequired` |
126 | | `ptel→` | `PropTypes.element` |
127 | | `ptelr→` | `PropTypes.element.isRequired` |
128 | | `pti→` | `PropTypes.instanceOf(name)` |
129 | | `ptir→` | `PropTypes.instanceOf(name).isRequired` |
130 | | `pte→` | `PropTypes.oneOf([name])` |
131 | | `pter→` | `PropTypes.oneOf([name]).isRequired` |
132 | | `ptet→` | `PropTypes.oneOfType([name])` |
133 | | `ptetr→` | `PropTypes.oneOfType([name]).isRequired` |
134 | | `ptao→` | `PropTypes.arrayOf(name)` |
135 | | `ptaor→` | `PropTypes.arrayOf(name).isRequired` |
136 | | `ptoo→` | `PropTypes.objectOf(name)` |
137 | | `ptoor→` | `PropTypes.objectOf(name).isRequired` |
138 | | `ptsh→` | `PropTypes.shape({ })` |
139 | | `ptshr→` | `PropTypes.shape({ }).isRequired` |
140 | | `ptany→` | `PropTypes.any` |
141 | | `ptypes→` | `static propTypes = {}` |
142 |
143 | ## GraphQL
144 |
145 | |`graphql→`|`import { compose, graphql } from 'react-apollo'`|
146 |
147 | ### `expgql`
148 |
149 | ```js
150 | export default compose(graphql($1, { name: $2 }))($3);
151 | ```
152 |
153 | ## Console
154 |
155 | | Prefix | Method |
156 | | -----: | ----------------------------------- |
157 | | `clg→` | `console.log(object)` |
158 | | `clo→` | `console.log("object", object)` |
159 | | `ctm→` | `console.time("timeId")` |
160 | | `cte→` | `console.timeEnd("timeId")` |
161 | | `cas→` | `console.assert(expression,object)` |
162 | | `ccl→` | `console.clear()` |
163 | | `cco→` | `console.count(label)` |
164 | | `cdi→` | `console.dir` |
165 | | `cer→` | `console.error(object)` |
166 | | `cgr→` | `console.group(label)` |
167 | | `cge→` | `console.groupEnd()` |
168 | | `ctr→` | `console.trace(object)` |
169 | | `cwa→` | `console.warn` |
170 | | `cin→` | `console.info` |
171 |
172 | ## React Components
173 |
174 | ### `rcc`
175 |
176 | ```javascript
177 | import React, { Component } from 'react';
178 |
179 | export default class FileName extends Component {
180 | render() {
181 | return
$2
;
182 | }
183 | }
184 | ```
185 |
186 | ### `rce`
187 |
188 | ```javascript
189 | import React, { Component } from 'react';
190 |
191 | export class FileName extends Component {
192 | render() {
193 | return $2
;
194 | }
195 | }
196 |
197 | export default $1;
198 | ```
199 |
200 | ### `rcep`
201 |
202 | ```javascript
203 | import React, { Component } from 'react';
204 | import PropTypes from 'prop-types';
205 |
206 | export class FileName extends Component {
207 | static propTypes = {};
208 |
209 | render() {
210 | return $2
;
211 | }
212 | }
213 |
214 | export default $1;
215 | ```
216 |
217 | ### `rpc`
218 |
219 | ```javascript
220 | import React, { PureComponent } from 'react';
221 |
222 | export default class FileName extends PureComponent {
223 | render() {
224 | return $2
;
225 | }
226 | }
227 | ```
228 |
229 | ### `rpcp`
230 |
231 | ```javascript
232 | import React, { PureComponent } from 'react';
233 | import PropTypes from 'prop-types';
234 |
235 | export default class FileName extends PureComponent {
236 | static propTypes = {};
237 |
238 | render() {
239 | return $2
;
240 | }
241 | }
242 | ```
243 |
244 | ### `rpce`
245 |
246 | ```javascript
247 | import React, { PureComponent } from 'react';
248 | import PropTypes from 'prop-types';
249 |
250 | export class FileName extends PureComponent {
251 | static propTypes = {};
252 |
253 | render() {
254 | return $2
;
255 | }
256 | }
257 |
258 | export default FileName;
259 | ```
260 |
261 | ### `rccp`
262 |
263 | ```javascript
264 | import React, { Component } from 'react';
265 | import PropTypes from 'prop-types';
266 |
267 | export default class FileName extends Component {
268 | static propTypes = {
269 | $2: $3,
270 | };
271 |
272 | render() {
273 | return $4
;
274 | }
275 | }
276 | ```
277 |
278 | ### `rfcp`
279 |
280 | ```javascript
281 | import React from 'react';
282 | import PropTypes from 'prop-types';
283 |
284 | function $1(props) {
285 | return $0
;
286 | }
287 |
288 | $1.propTypes = {};
289 |
290 | export default $1;
291 | ```
292 |
293 | ### `rfc`
294 |
295 | ```javascript
296 | import React from 'react';
297 |
298 | export default function $1() {
299 | return $0
;
300 | }
301 | ```
302 |
303 | ### `rfce`
304 |
305 | ```javascript
306 | import React from 'react';
307 |
308 | function $1() {
309 | return $0
;
310 | }
311 |
312 | export default $1;
313 | ```
314 |
315 | ### `rafcp`
316 |
317 | ```javascript
318 | import React from 'react';
319 | import PropTypes from 'prop-types';
320 |
321 | const $1 = props => {
322 | return $0
;
323 | };
324 |
325 | $1.propTypes = {};
326 |
327 | export default $1;
328 | ```
329 |
330 | ### `rafc`
331 |
332 | ```javascript
333 | import React from 'react';
334 |
335 | const $1 = () => {
336 | return $0
;
337 | };
338 |
339 | export default $1;
340 | ```
341 |
342 | ### `rafce`
343 |
344 | ```javascript
345 | import React from 'react';
346 |
347 | const $1 = () => {
348 | return $0
;
349 | };
350 |
351 | export default $1;
352 | ```
353 |
354 | ### `rmc`
355 |
356 | ```javascript
357 | import React, { memo } from 'react';
358 |
359 | export default memo(function $1() {
360 | return $0
;
361 | });
362 | ```
363 |
364 | ### `rmcp`
365 |
366 | ```javascript
367 | import React, { memo } from 'react';
368 | import PropTypes from 'prop-types';
369 |
370 | const $1 = memo(function $1(props) {
371 | return $0
;
372 | });
373 |
374 | $1.propTypes = {};
375 |
376 | export default $1;
377 | ```
378 |
379 | ### `rcredux`
380 |
381 | ```javascript
382 | import React, { Component } from 'react';
383 | import PropTypes from 'prop-types';
384 | import { connect } from 'react-redux';
385 |
386 | export class FileName extends Component {
387 | static propTypes = {
388 | $2: $3,
389 | };
390 |
391 | render() {
392 | return $4
;
393 | }
394 | }
395 |
396 | const mapStateToProps = state => ({});
397 |
398 | const mapDispatchToProps = {};
399 |
400 | export default connect(
401 | mapStateToProps,
402 | mapDispatchToProps,
403 | )(FileName);
404 | ```
405 |
406 | ### `reduxmap`
407 |
408 | ```javascript
409 | const mapStateToProps = state => ({});
410 |
411 | const mapDispatchToProps = {};
412 | ```
413 |
414 | ## React Native Components
415 |
416 | ### `rnc`
417 |
418 | ```javascript
419 | import React, { Component } from 'react';
420 | import { Text, View } from 'react-native';
421 |
422 | export default class FileName extends Component {
423 | render() {
424 | return (
425 |
426 | $2
427 |
428 | );
429 | }
430 | }
431 | ```
432 |
433 | ### `rnf`
434 |
435 | ```javascript
436 | import React from 'react';
437 | import { View, Text } from 'react-native';
438 |
439 | const $1 = () => {
440 | return (
441 |
442 | $2
443 |
444 | );
445 | };
446 |
447 | export default $1;
448 | ```
449 |
450 | ### `rncs`
451 |
452 | ```javascript
453 | import React, { Component } from 'react';
454 | import { Text, StyleSheet, View } from 'react-native';
455 |
456 | export default class FileName extends Component {
457 | render() {
458 | return (
459 |
460 | $2
461 |
462 | );
463 | }
464 | }
465 |
466 | const styles = StyleSheet.create({});
467 | ```
468 |
469 | ### `rnce`
470 |
471 | ```javascript
472 | import React, { Component } from 'react';
473 | import { Text, View } from 'react-native';
474 |
475 | export class FileName extends Component {
476 | render() {
477 | return (
478 |
479 | $2
480 |
481 | );
482 | }
483 | }
484 |
485 | export default $1;
486 | ```
487 |
488 | ### `rncredux`
489 |
490 | ```javascript
491 | import React, { Component } from 'react';
492 | import { View, Text } from 'react-native';
493 | import PropTypes from 'prop-types';
494 | import { connect } from 'react-redux';
495 |
496 | export class FileName extends Component {
497 | static propTypes = {
498 | $2: $3,
499 | };
500 |
501 | render() {
502 | return (
503 |
504 | $2
505 |
506 | );
507 | }
508 | }
509 |
510 | const mapStateToProps = state => ({});
511 |
512 | const mapDispatchToProps = {};
513 |
514 | export default connect(
515 | mapStateToProps,
516 | mapDispatchToProps,
517 | )(FileName);
518 | ```
519 |
520 | ## Others
521 |
522 | ### `cmmb`
523 |
524 | ```JS
525 | /**
526 | |--------------------------------------------------
527 | | $1
528 | |--------------------------------------------------
529 | */
530 | ```
531 |
532 | ### `desc`
533 |
534 | ```javascript
535 | describe('$1', () => {
536 | $2;
537 | });
538 | ```
539 |
540 | ### `test`
541 |
542 | ```javascript
543 | test('should $1', () => {
544 | $2;
545 | });
546 | ```
547 |
548 | ### `tit`
549 |
550 | ```javascript
551 | it('should $1', () => {
552 | $2;
553 | });
554 | ```
555 |
556 | ### `stest`
557 |
558 | ```javascript
559 | import React from 'react'
560 | import renderer from 'react-test-renderer'
561 |
562 | import { ${1:ComponentName} } from '../${1:ComponentName}'
563 |
564 | describe('<${1:ComponentName} />', () => {
565 | const defaultProps = {}
566 | const wrapper = renderer.create(<${1:ComponentName} {...defaultProps} />)
567 |
568 | test('render', () => {
569 | expect(wrapper).toMatchSnapshot()
570 | })
571 | })
572 | ```
573 |
574 | ### `srtest`
575 |
576 | ```javascript
577 | import React from 'react'
578 | import renderer from 'react-test-renderer'
579 | import { Provider } from 'react-redux'
580 |
581 | import store from 'src/store'
582 | import { ${1:ComponentName} } from '../${1:ComponentName}'
583 |
584 | describe('<${1:ComponentName} />', () => {
585 | const defaultProps = {}
586 | const wrapper = renderer.create(
587 |
588 | <${1:${TM_FILENAME_BASE}} {...defaultProps} />)
589 | ,
590 | )
591 |
592 | test('render', () => {
593 | expect(wrapper).toMatchSnapshot()
594 | })
595 | })
596 | ```
597 |
598 | ### `sntest`
599 |
600 | ```javascript
601 | import 'react-native'
602 | import React from 'react'
603 | import renderer from 'react-test-renderer'
604 |
605 | import ${1:ComponentName} from '../${1:ComponentName}'
606 |
607 | describe('<${1:ComponentName} />', () => {
608 | const defaultProps = {
609 |
610 | }
611 |
612 | const wrapper = renderer.create(<${1:ComponentName} {...defaultProps} />)
613 |
614 | test('render', () => {
615 | expect(wrapper).toMatchSnapshot()
616 | })
617 | })
618 | ```
619 |
620 | ### `snrtest`
621 |
622 | ```javascript
623 | import 'react-native'
624 | import React from 'react'
625 | import renderer from 'react-test-renderer'
626 | import { Provider } from 'react-redux'
627 |
628 | import store from 'src/store/configureStore'
629 | import ${1:ComponentName} from '../${1:ComponentName}'
630 |
631 | describe('<${1:ComponentName} />', () => {
632 | const defaultProps = {}
633 | const wrapper = renderer.create(
634 |
635 | <${1:ComponentName} {...defaultProps} />
636 | ,
637 | )
638 |
639 | test('render', () => {
640 | expect(wrapper).toMatchSnapshot()
641 | })
642 | })
643 | ```
644 |
645 | ### `hocredux`
646 |
647 | ```javascript
648 | import React from 'react'
649 | import PropTypes from 'prop-types'
650 | import { connect } from 'react-redux'
651 |
652 | export const mapStateToProps = state => ({
653 |
654 | })
655 |
656 | export const mapDispatchToProps = {
657 |
658 | }
659 |
660 | export const ${1:hocComponentName} = (WrappedComponent) => {
661 | const hocComponent = ({ ...props }) =>
662 |
663 | hocComponent.propTypes = {
664 | }
665 |
666 | return hocComponent
667 | }
668 |
669 | export default WrapperComponent => connect(mapStateToProps, mapDispatchToProps)(${1:hocComponentName}(WrapperComponent))
670 | ```
671 |
672 | ### `hoc`
673 |
674 | ```javascript
675 | import React from 'react';
676 | import PropTypes from 'prop-types';
677 |
678 | export default WrappedComponent => {
679 | const hocComponent = ({ ...props }) => ;
680 |
681 | hocComponent.propTypes = {};
682 |
683 | return hocComponent;
684 | };
685 | ```
686 |
--------------------------------------------------------------------------------
/snippets/CommentBigBlock.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
7 | cmmb
8 | source.js,source.jsx,source.ts,source.tsx
9 | Comment Big Block
10 |
--------------------------------------------------------------------------------
/snippets/anonymousFunction.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 | {
3 | ${2}
4 | }
5 | ]]>
6 | anfn
7 | source.js,source.jsx,source.ts,source.tsx
8 | anonymousFunction
9 |
--------------------------------------------------------------------------------
/snippets/bindThis.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
3 | bnd
4 | source.js,source.jsx,source.ts,source.tsx
5 | bindThis
6 |
--------------------------------------------------------------------------------
/snippets/classConstructor.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
10 | rconst
11 | source.js,source.jsx,source.ts,source.tsx
12 | classConstructor
13 |
--------------------------------------------------------------------------------
/snippets/componentDidMount.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
6 | cdm
7 | source.js,source.jsx,source.ts,source.tsx
8 | componentDidMount
9 |
--------------------------------------------------------------------------------
/snippets/componentDidUpdate.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
6 | cdup
7 | source.js,source.jsx,source.ts,source.tsx
8 | componentDidUpdate
9 |
--------------------------------------------------------------------------------
/snippets/componentProps.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
3 | props
4 | source.js,source.jsx,source.ts,source.tsx
5 | componentProps
6 |
--------------------------------------------------------------------------------
/snippets/componentRender.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
5 | $0
6 |
7 | )
8 | }]]>
9 | ren
10 | source.js,source.jsx,source.ts,source.tsx
11 | componentRender
12 |
--------------------------------------------------------------------------------
/snippets/componentSetStateFunc.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 | { return { $0 }})
3 | ]]>
4 | ssf
5 | source.js,source.jsx,source.ts,source.tsx
6 | componentSetStateFunc
7 |
--------------------------------------------------------------------------------
/snippets/componentSetStateObject.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
3 | sst
4 | source.js,source.jsx,source.ts,source.tsx
5 | componentSetStateObject
6 |
--------------------------------------------------------------------------------
/snippets/componentState.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
3 | state
4 | source.js,source.jsx,source.ts,source.tsx
5 | componentState
6 |
--------------------------------------------------------------------------------
/snippets/componentWillMount.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
6 | cwm
7 | source.js,source.jsx,source.ts,source.tsx
8 | componentWillMount
9 |
--------------------------------------------------------------------------------
/snippets/componentWillReceiveProps.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
6 | cwr
7 | source.js,source.jsx,source.ts,source.tsx
8 | componentWillReceiveProps
9 |
--------------------------------------------------------------------------------
/snippets/componentWillUnmount.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
6 | cwun
7 | source.js,source.jsx,source.ts,source.tsx
8 | componentWillUnmount
9 |
--------------------------------------------------------------------------------
/snippets/componentWillUpdate.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
6 | cwup
7 | source.js,source.jsx,source.ts,source.tsx
8 | componentWillUpdate
9 |
--------------------------------------------------------------------------------
/snippets/consoleAssert.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
3 | cas
4 | source.js,source.jsx,source.ts,source.tsx
5 | consoleAssert
6 |
--------------------------------------------------------------------------------
/snippets/consoleClear.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
3 | ccl
4 | source.js,source.jsx,source.ts,source.tsx
5 | consoleClear
6 |
--------------------------------------------------------------------------------
/snippets/consoleCount.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
3 | cco
4 | source.js,source.jsx,source.ts,source.tsx
5 | consoleCount
6 |
--------------------------------------------------------------------------------
/snippets/consoleDir.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
3 | cdi
4 | source.js,source.jsx,source.ts,source.tsx
5 | consoleDir
6 |
--------------------------------------------------------------------------------
/snippets/consoleError.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
3 | cer
4 | source.js,source.jsx,source.ts,source.tsx
5 | consoleError
6 |
--------------------------------------------------------------------------------
/snippets/consoleGroup.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
3 | cgr
4 | source.js,source.jsx,source.ts,source.tsx
5 | consoleGroup
6 |
--------------------------------------------------------------------------------
/snippets/consoleGroupEnd.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
3 | cge
4 | source.js,source.jsx,source.ts,source.tsx
5 | consoleGroupEnd
6 |
--------------------------------------------------------------------------------
/snippets/consoleInfo.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
3 | cin
4 | source.js,source.jsx,source.ts,source.tsx
5 | consoleInfo
6 |
--------------------------------------------------------------------------------
/snippets/consoleLog.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
3 | clg
4 | source.js,source.jsx,source.ts,source.tsx
5 | consoleLog
6 |
--------------------------------------------------------------------------------
/snippets/consoleLogObject.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
3 | clo
4 | source.js,source.jsx,source.ts,source.tsx
5 | consoleLogObject
6 |
--------------------------------------------------------------------------------
/snippets/consoleTime.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
3 | ctm
4 | source.js,source.jsx,source.ts,source.tsx
5 | consoleTime
6 |
--------------------------------------------------------------------------------
/snippets/consoleTimeEnd.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
3 | cte
4 | source.js,source.jsx,source.ts,source.tsx
5 | consoleTimeEnd
6 |
--------------------------------------------------------------------------------
/snippets/consoleTrace.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
3 | ctr
4 | source.js,source.jsx,source.ts,source.tsx
5 | consoleTrace
6 |
--------------------------------------------------------------------------------
/snippets/consoleWarn.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
3 | cwa
4 | source.js,source.jsx,source.ts,source.tsx
5 | consoleWarn
6 |
--------------------------------------------------------------------------------
/snippets/createContext.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
4 | rcontext
5 | source.js,source.jsx,source.ts,source.tsx
6 | createContext
7 |
--------------------------------------------------------------------------------
/snippets/createRef.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
4 | cref
5 | source.js,source.jsx,source.ts,source.tsx
6 | createRef
7 |
--------------------------------------------------------------------------------
/snippets/describeBlock.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 | {
3 | $0
4 | })
5 | ]]>
6 | desc
7 | source.js,source.jsx,source.ts,source.tsx
8 | describeBlock
9 |
--------------------------------------------------------------------------------
/snippets/destructProps.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
3 | cp
4 | source.js,source.jsx,source.ts,source.tsx
5 | destructProps
6 |
--------------------------------------------------------------------------------
/snippets/destructState.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
3 | cs
4 | source.js,source.jsx,source.ts,source.tsx
5 | destructState
6 |
--------------------------------------------------------------------------------
/snippets/destructingArray.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
3 | dar
4 | source.js,source.jsx,source.ts,source.tsx
5 | destructingArray
6 |
--------------------------------------------------------------------------------
/snippets/destructingObject.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
3 | dob
4 | source.js,source.jsx,source.ts,source.tsx
5 | destructingObject
6 |
--------------------------------------------------------------------------------
/snippets/emptyState.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
6 | est
7 | source.js,source.jsx,source.ts,source.tsx
8 | emptyState
9 |
--------------------------------------------------------------------------------
/snippets/exportAs.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
3 | exa
4 | source.js,source.jsx,source.ts,source.tsx
5 | exportAs
6 |
--------------------------------------------------------------------------------
/snippets/exportDefault.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
3 | exp
4 | source.js,source.jsx,source.ts,source.tsx
5 | exportDefault
6 |
--------------------------------------------------------------------------------
/snippets/exportDefaultFunction.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 | {
3 | $0
4 | }
5 | ]]>
6 | edf
7 | source.js,source.jsx,source.ts,source.tsx
8 | exportDefaultFunction
9 |
--------------------------------------------------------------------------------
/snippets/exportDestructing.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
3 | exd
4 | source.js,source.jsx,source.ts,source.tsx
5 | exportDestructing
6 |
--------------------------------------------------------------------------------
/snippets/exportGraphQL.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
5 | expgql
6 | source.js,source.jsx,source.ts,source.tsx
7 | exportGraphQL
8 |
--------------------------------------------------------------------------------
/snippets/exportNamedFunction.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 | {
3 | $0
4 | }
5 | ]]>
6 | enf
7 | source.js,source.jsx,source.ts,source.tsx
8 | exportNamedFunction
9 |
--------------------------------------------------------------------------------
/snippets/forEach.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 | {
3 | ${0}
4 | })
5 | ]]>
6 | fre
7 | source.js,source.jsx,source.ts,source.tsx
8 | forEach
9 |
--------------------------------------------------------------------------------
/snippets/forIn.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
6 | fin
7 | source.js,source.jsx,source.ts,source.tsx
8 | forIn
9 |
--------------------------------------------------------------------------------
/snippets/forOf.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
6 | fof
7 | source.js,source.jsx,source.ts,source.tsx
8 | forOf
9 |
--------------------------------------------------------------------------------
/snippets/forwardRef.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
4 | fref
5 | source.js,source.jsx,source.ts,source.tsx
6 | forwardRef
7 |
--------------------------------------------------------------------------------
/snippets/getDerivedStateFromProps.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
5 | gdsfp
6 | source.js,source.jsx,source.ts,source.tsx
7 | getDerivedStateFromProps
8 |
--------------------------------------------------------------------------------
/snippets/getSnapshotBeforeUpdate.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 | {
3 | $0
4 | }
5 | ]]>
6 | gsbu
7 | source.js,source.jsx,source.ts,source.tsx
8 | getSnapshotBeforeUpdate
9 |
--------------------------------------------------------------------------------
/snippets/graphQLForComponent.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
4 | graphql
5 | source.js,source.jsx,source.ts,source.tsx
6 | graphQLForComponent
7 |
--------------------------------------------------------------------------------
/snippets/hocComponent.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 | {
6 | const hocComponent = ({ ...props }) =>
7 |
8 | hocComponent.propTypes = {
9 | }
10 |
11 | return hocComponent
12 | }
13 | ]]>
14 | hoc
15 | source.js,source.jsx,source.ts,source.tsx
16 | hocComponent
17 |
--------------------------------------------------------------------------------
/snippets/hocComponentWithRedux.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 | ({
7 |
8 | })
9 |
10 | export const mapDispatchToProps = {
11 |
12 | }
13 |
14 | export const ${1:hocComponentName} = (WrappedComponent) => {
15 | const hocComponent = ({ ...props }) =>
16 |
17 | hocComponent.propTypes = {
18 | }
19 |
20 | return hocComponent
21 | }
22 |
23 | export default WrapperComponent => connect(mapStateToProps, mapDispatchToProps)(${1:hocComponentName}(WrapperComponent))
24 | ]]>
25 | hocredux
26 | source.js,source.jsx,source.ts,source.tsx
27 | hocComponentWithRedux
28 |
--------------------------------------------------------------------------------
/snippets/import.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
3 | imp
4 | source.js,source.jsx,source.ts,source.tsx
5 | import
6 |
--------------------------------------------------------------------------------
/snippets/importAs.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
3 | ima
4 | source.js,source.jsx,source.ts,source.tsx
5 | importAs
6 |
--------------------------------------------------------------------------------
/snippets/importDestructing.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
3 | imd
4 | source.js,source.jsx,source.ts,source.tsx
5 | importDestructing
6 |
--------------------------------------------------------------------------------
/snippets/importEverything.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
3 | ime
4 | source.js,source.jsx,source.ts,source.tsx
5 | importEverything
6 |
--------------------------------------------------------------------------------
/snippets/importNoModuleName.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
3 | imn
4 | source.js,source.jsx,source.ts,source.tsx
5 | importNoModuleName
6 |
--------------------------------------------------------------------------------
/snippets/importPropTypes.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
4 | impt
5 | source.js,source.jsx,source.ts,source.tsx
6 | import PropTypes
7 |
--------------------------------------------------------------------------------
/snippets/importReact.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
4 | imrpc
5 | source.js,source.jsx,source.ts,source.tsx
6 | import React
7 |
--------------------------------------------------------------------------------
/snippets/importReactDOM.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
4 | imrd
5 | source.js,source.jsx,source.ts,source.tsx
6 | import ReactDOM
7 |
--------------------------------------------------------------------------------
/snippets/importReactPropTypes.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
5 | imrpcp
6 | source.js,source.jsx,source.ts,source.tsx
7 | import React & PropTypes
8 |
--------------------------------------------------------------------------------
/snippets/importReactRouter.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
4 | imrr
5 | source.js,source.jsx,source.ts,source.tsx
6 | import React Router
7 |
--------------------------------------------------------------------------------
/snippets/importReactmemo.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
4 | imrm
5 | source.js,source.jsx,source.ts,source.tsx
6 | import React, { memo }
7 |
--------------------------------------------------------------------------------
/snippets/importReactmemoPropTypes.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
5 | imrmp
6 | source.js,source.jsx,source.ts,source.tsx
7 | import React, { memo } & PropTypes
8 |
--------------------------------------------------------------------------------
/snippets/importreduxstatement.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
4 | redux
5 | source.js,source.jsx,source.ts,source.tsx
6 | import redux statement
7 |
--------------------------------------------------------------------------------
/snippets/itBlock.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 | {
3 | $0
4 | })
5 | ]]>
6 | tit
7 | source.js,source.jsx,source.ts,source.tsx
8 | itBlock
9 |
--------------------------------------------------------------------------------
/snippets/mappingToProps.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 | ({
3 | ${1}
4 | })
5 |
6 | const mapDispatchToProps = {
7 |
8 | }
9 | ]]>
10 | reduxmap
11 | source.js,source.jsx,source.ts,source.tsx
12 | mappingToProps
13 |
--------------------------------------------------------------------------------
/snippets/method.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 | {
3 | ${0}
4 | }
5 | ]]>
6 | met
7 | source.js,source.jsx,source.ts,source.tsx
8 | method
9 |
--------------------------------------------------------------------------------
/snippets/namedFunction.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 | {
3 | ${3}
4 | }
5 | ]]>
6 | nfn
7 | source.js,source.jsx,source.ts,source.tsx
8 | namedFunction
9 |
--------------------------------------------------------------------------------
/snippets/promise.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 | {
3 | ${1}
4 | })
5 | ]]>
6 | prom
7 | source.js,source.jsx,source.ts,source.tsx
8 | promise
9 |
--------------------------------------------------------------------------------
/snippets/propTypeAny.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
3 | ptany
4 | source.js,source.jsx,source.ts,source.tsx
5 | propTypeAny
6 |
--------------------------------------------------------------------------------
/snippets/propTypeArray.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
3 | pta
4 | source.js,source.jsx,source.ts,source.tsx
5 | propTypeArray
6 |
--------------------------------------------------------------------------------
/snippets/propTypeArrayOf.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
3 | ptao
4 | source.js,source.jsx,source.ts,source.tsx
5 | propTypeArrayOf
6 |
--------------------------------------------------------------------------------
/snippets/propTypeArrayOfRequired.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
3 | ptaor
4 | source.js,source.jsx,source.ts,source.tsx
5 | propTypeArrayOfRequired
6 |
--------------------------------------------------------------------------------
/snippets/propTypeArrayRequired.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
3 | ptar
4 | source.js,source.jsx,source.ts,source.tsx
5 | propTypeArrayRequired
6 |
--------------------------------------------------------------------------------
/snippets/propTypeBool.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
3 | ptb
4 | source.js,source.jsx,source.ts,source.tsx
5 | propTypeBool
6 |
--------------------------------------------------------------------------------
/snippets/propTypeBoolRequired.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
3 | ptbr
4 | source.js,source.jsx,source.ts,source.tsx
5 | propTypeBoolRequired
6 |
--------------------------------------------------------------------------------
/snippets/propTypeElement.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
3 | ptel
4 | source.js,source.jsx,source.ts,source.tsx
5 | propTypeElement
6 |
--------------------------------------------------------------------------------
/snippets/propTypeElementRequired.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
3 | ptelr
4 | source.js,source.jsx,source.ts,source.tsx
5 | propTypeElementRequired
6 |
--------------------------------------------------------------------------------
/snippets/propTypeEnum.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
3 | pte
4 | source.js,source.jsx,source.ts,source.tsx
5 | propTypeEnum
6 |
--------------------------------------------------------------------------------
/snippets/propTypeEnumRequired.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
3 | pter
4 | source.js,source.jsx,source.ts,source.tsx
5 | propTypeEnumRequired
6 |
--------------------------------------------------------------------------------
/snippets/propTypeFunc.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
3 | ptf
4 | source.js,source.jsx,source.ts,source.tsx
5 | propTypeFunc
6 |
--------------------------------------------------------------------------------
/snippets/propTypeFuncRequired.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
3 | ptfr
4 | source.js,source.jsx,source.ts,source.tsx
5 | propTypeFuncRequired
6 |
--------------------------------------------------------------------------------
/snippets/propTypeInstanceOf.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
3 | pti
4 | source.js,source.jsx,source.ts,source.tsx
5 | propTypeInstanceOf
6 |
--------------------------------------------------------------------------------
/snippets/propTypeInstanceOfRequired.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
3 | ptir
4 | source.js,source.jsx,source.ts,source.tsx
5 | propTypeInstanceOfRequired
6 |
--------------------------------------------------------------------------------
/snippets/propTypeNode.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
3 | ptnd
4 | source.js,source.jsx,source.ts,source.tsx
5 | propTypeNode
6 |
--------------------------------------------------------------------------------
/snippets/propTypeNodeRequired.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
3 | ptndr
4 | source.js,source.jsx,source.ts,source.tsx
5 | propTypeNodeRequired
6 |
--------------------------------------------------------------------------------
/snippets/propTypeNumber.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
3 | ptn
4 | source.js,source.jsx,source.ts,source.tsx
5 | propTypeNumber
6 |
--------------------------------------------------------------------------------
/snippets/propTypeNumberRequired.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
3 | ptnr
4 | source.js,source.jsx,source.ts,source.tsx
5 | propTypeNumberRequired
6 |
--------------------------------------------------------------------------------
/snippets/propTypeObject.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
3 | pto
4 | source.js,source.jsx,source.ts,source.tsx
5 | propTypeObject
6 |
--------------------------------------------------------------------------------
/snippets/propTypeObjectOf.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
3 | ptoo
4 | source.js,source.jsx,source.ts,source.tsx
5 | propTypeObjectOf
6 |
--------------------------------------------------------------------------------
/snippets/propTypeObjectOfRequired.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
3 | ptoor
4 | source.js,source.jsx,source.ts,source.tsx
5 | propTypeObjectOfRequired
6 |
--------------------------------------------------------------------------------
/snippets/propTypeObjectRequired.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
3 | ptor
4 | source.js,source.jsx,source.ts,source.tsx
5 | propTypeObjectRequired
6 |
--------------------------------------------------------------------------------
/snippets/propTypeOneOfType.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
5 | ptet
6 | source.js,source.jsx,source.ts,source.tsx
7 | propTypeOneOfType
8 |
--------------------------------------------------------------------------------
/snippets/propTypeOneOfTypeRequired.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
5 | ptetr
6 | source.js,source.jsx,source.ts,source.tsx
7 | propTypeOneOfTypeRequired
8 |
--------------------------------------------------------------------------------
/snippets/propTypeShape.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
5 | ptsh
6 | source.js,source.jsx,source.ts,source.tsx
7 | propTypeShape
8 |
--------------------------------------------------------------------------------
/snippets/propTypeShapeRequired.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
5 | ptshr
6 | source.js,source.jsx,source.ts,source.tsx
7 | propTypeShapeRequired
8 |
--------------------------------------------------------------------------------
/snippets/propTypeString.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
3 | pts
4 | source.js,source.jsx,source.ts,source.tsx
5 | propTypeString
6 |
--------------------------------------------------------------------------------
/snippets/propTypeStringRequired.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
3 | ptsr
4 | source.js,source.jsx,source.ts,source.tsx
5 | propTypeStringRequired
6 |
--------------------------------------------------------------------------------
/snippets/propertyGet.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
6 | pge
7 | source.js,source.jsx,source.ts,source.tsx
8 | propertyGet
9 |
--------------------------------------------------------------------------------
/snippets/propertyset.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
6 | pse
7 | source.js,source.jsx,source.ts,source.tsx
8 | propertySet
9 |
--------------------------------------------------------------------------------
/snippets/reactArrowFunctionComponent.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 | {
5 | return (
6 |
7 | $0
8 |
9 | )
10 | }
11 |
12 | export default ${1:${TM_FILENAME_BASE}}
13 | ]]>
14 | rafc,rafce
15 | source.js,source.jsx,source.ts,source.tsx
16 | reactArrowFunctionComponent
17 |
--------------------------------------------------------------------------------
/snippets/reactArrowFunctionComponentWithPropTypes.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 | {
6 | return (
7 |
8 | $0
9 |
10 | )
11 | }
12 |
13 | ${1:${TM_FILENAME_BASE}}.propTypes = {
14 |
15 | }
16 |
17 | export default ${1:${TM_FILENAME_BASE}}
18 | ]]>
19 | rafcp
20 | source.js,source.jsx,source.ts,source.tsx
21 | reactArrowFunctionComponentWithPropTypes
22 |
--------------------------------------------------------------------------------
/snippets/reactClassCompoment.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
8 | $0
9 |
10 | )
11 | }
12 | }
13 | ]]>
14 | rcc
15 | source.js,source.jsx,source.ts,source.tsx
16 | reactClassCompoment
17 |
--------------------------------------------------------------------------------
/snippets/reactClassCompomentPropTypes.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
13 | $0
14 |
15 | )
16 | }
17 | }
18 | ]]>
19 | rccp
20 | source.js,source.jsx,source.ts,source.tsx
21 | reactClassCompomentPropTypes
22 |
--------------------------------------------------------------------------------
/snippets/reactClassCompomentRedux.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
14 | $0
15 |
16 | )
17 | }
18 | }
19 |
20 | const mapStateToProps = (state) => ({
21 |
22 | })
23 |
24 | const mapDispatchToProps = {
25 |
26 | }
27 |
28 | export default connect(mapStateToProps, mapDispatchToProps)(${1:${TM_FILENAME_BASE}})
29 | ]]>
30 | rcredux
31 | source.js,source.jsx,source.ts,source.tsx
32 | reactClassCompomentRedux
33 |
--------------------------------------------------------------------------------
/snippets/reactClassExportComponent.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
8 | $0
9 |
10 | )
11 | }
12 | }
13 |
14 | export default ${1:${TM_FILENAME_BASE}}
15 | ]]>
16 | rce
17 | source.js,source.jsx,source.ts,source.tsx
18 | reactClassExportComponent
19 |
--------------------------------------------------------------------------------
/snippets/reactClassExportComponentWithPropTypes.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
13 | $0
14 |
15 | )
16 | }
17 | }
18 |
19 | export default ${1:${TM_FILENAME_BASE}}
20 | ]]>
21 | rcep
22 | source.js,source.jsx,source.ts,source.tsx
23 | reactClassExportComponentWithPropTypes
24 |
--------------------------------------------------------------------------------
/snippets/reactClassExportPureComponent.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
8 | $0
9 |
10 | )
11 | }
12 | }
13 |
14 | export default ${1:$TM_FILENAME_BASE}
15 | ]]>
16 | rpce
17 | source.js,source.jsx,source.ts,source.tsx
18 | reactClassExportPureComponent
19 |
--------------------------------------------------------------------------------
/snippets/reactClassPureComponent.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
8 | $0
9 |
10 | )
11 | }
12 | }
13 | ]]>
14 | rpc
15 | source.js,source.jsx,source.ts,source.tsx
16 | reactClassPureComponent
17 |
--------------------------------------------------------------------------------
/snippets/reactClassPureComponentWithPropTypes.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
13 | $0
14 |
15 | )
16 | }
17 | }
18 | ]]>
19 | rpcp
20 | source.js,source.jsx,source.ts,source.tsx
21 | reactClassPureComponentWithPropTypes
22 |
--------------------------------------------------------------------------------
/snippets/reactFunctionMemoComponent.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
7 | $0
8 |
9 | )
10 | })
11 | ]]>
12 | rmc
13 | source.js,source.jsx,source.ts,source.tsx
14 | reactFunctionMemoComponent
15 |
--------------------------------------------------------------------------------
/snippets/reactFunctionMemoComponentWithPropTypes.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
8 | $0
9 |
10 | )
11 | })
12 |
13 | ${1:${TM_FILENAME_BASE}}.propTypes = {
14 |
15 | }
16 |
17 | export default ${1:${TM_FILENAME_BASE}}
18 | ]]>
19 | rmcp
20 | source.js,source.jsx,source.ts,source.tsx
21 | reactFunctionMemoComponentWithPropTypes
22 |
--------------------------------------------------------------------------------
/snippets/reactFunctionalComponent.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
7 | $0
8 |
9 | )
10 | }
11 | ]]>
12 | rfc
13 | source.js,source.jsx,source.ts,source.tsx
14 | reactFunctionalComponent
15 |
--------------------------------------------------------------------------------
/snippets/reactFunctionalComponentWithPropTypes.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
8 | $0
9 |
10 | )
11 | }
12 |
13 | ${1:${TM_FILENAME_BASE}}.propTypes = {
14 |
15 | }
16 |
17 | export default ${1:${TM_FILENAME_BASE}}
18 |
19 | ]]>
20 | rfcp
21 | source.js,source.jsx,source.ts,source.tsx
22 | reactFunctionalComponentWithPropTypes
23 |
--------------------------------------------------------------------------------
/snippets/reactFunctionalExportComponent.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
7 | $0
8 |
9 | )
10 | }
11 |
12 | export default ${1:${TM_FILENAME_BASE}}
13 | ]]>
14 | rfce
15 | source.js,source.jsx,source.ts,source.tsx
16 | reactFunctionalExportComponent
17 |
--------------------------------------------------------------------------------
/snippets/reactNativeArrowFunctionComponent.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 | {
6 | return (
7 |
8 | $0
9 |
10 | )
11 | }
12 |
13 | export default ${1:${TM_FILENAME_BASE}}
14 | ]]>
15 | rnf
16 | source.js,source.jsx,source.ts,source.tsx
17 | reactNativeArrowFunctionComponent
18 |
--------------------------------------------------------------------------------
/snippets/reactNativeClassComponentRedux.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
15 | ${2:textInComponent}
16 |
17 | )
18 | }
19 | }
20 |
21 | const mapStateToProps = (state) => ({
22 |
23 | })
24 |
25 | const mapDispatchToProps = {
26 |
27 | }
28 |
29 | export default connect(mapStateToProps, mapDispatchToProps)(${1:${TM_FILENAME_BASE}})
30 | ]]>
31 | rncredux
32 | source.js,source.jsx,source.ts,source.tsx
33 | reactNativeClassComponentRedux
34 |
--------------------------------------------------------------------------------
/snippets/reactNativeComponent.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
9 | ${2:textInComponent}
10 |
11 | )
12 | }
13 | }
14 | ]]>
15 | rnc
16 | source.js,source.jsx,source.ts,source.tsx
17 | reactNativeComponent
18 |
--------------------------------------------------------------------------------
/snippets/reactNativeComponentExport.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
9 | ${2:textInComponent}
10 |
11 | )
12 | }
13 | }
14 |
15 | export default ${1:${TM_FILENAME_BASE}}
16 | ]]>
17 | rnce
18 | source.js,source.jsx,source.ts,source.tsx
19 | reactNativeComponentExport
20 |
--------------------------------------------------------------------------------
/snippets/reactNativeComponentWithStyles.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
9 | ${2:textInComponent}
10 |
11 | )
12 | }
13 | }
14 |
15 | const styles = StyleSheet.create({})
16 | ]]>
17 | rncs
18 | source.js,source.jsx,source.ts,source.tsx
19 | reactNativeComponentWithStyles
20 |
--------------------------------------------------------------------------------
/snippets/reactNativeImport.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
3 | imrn
4 | source.js,source.jsx,source.ts,source.tsx
5 | reactNativeImport
6 |
--------------------------------------------------------------------------------
/snippets/reactNativePureComponent.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
9 | ${2:textInComponent}
10 |
11 | )
12 | }
13 | }
14 | ]]>
15 | rnpc
16 | source.js,source.jsx,source.ts,source.tsx
17 | reactNativePureComponent
18 |
--------------------------------------------------------------------------------
/snippets/reactNativePureComponentExport.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
9 | ${2:textInComponent}
10 |
11 | )
12 | }
13 | }
14 |
15 | export default ${1:${TM_FILENAME_BASE}}
16 | ]]>
17 | rnpce
18 | source.js,source.jsx,source.ts,source.tsx
19 | reactNativePureComponentExport
20 |
--------------------------------------------------------------------------------
/snippets/reactNativeStyles.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
6 | rnstyle
7 | source.js,source.jsx,source.ts,source.tsx
8 | reactNativeStyles
9 |
--------------------------------------------------------------------------------
/snippets/reduxAction.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 | ({
3 | type: ${3:type},
4 | payload
5 | })
6 | ]]>
7 | rxaction
8 | source.js,source.jsx,source.ts,source.tsx
9 | reduxAction
10 |
--------------------------------------------------------------------------------
/snippets/reduxConst.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
3 | rxconst
4 | source.js,source.jsx,source.ts,source.tsx
5 | reduxConst
6 |
--------------------------------------------------------------------------------
/snippets/reduxReducer.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 | {
7 | switch (type) {
8 |
9 | case ${1:typeName}:
10 | return { ...state, ...payload }
11 |
12 | default:
13 | return state
14 | }
15 | }
16 | ]]>
17 | rxreducer
18 | source.js,source.jsx,source.ts,source.tsx
19 | reduxReducer
20 |
--------------------------------------------------------------------------------
/snippets/reduxSelector.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 | state.${2:selector}
5 | ]]>
6 | rxselect
7 | source.js,source.jsx,source.ts,source.tsx
8 | reduxSelector
9 |
--------------------------------------------------------------------------------
/snippets/setInterval.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 | {
3 | ${2}
4 | }, ${0:intervalInms})
5 | ]]>
6 | sti
7 | source.js,source.jsx,source.ts,source.tsx
8 | setInterval
9 |
--------------------------------------------------------------------------------
/snippets/setTimeOut.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 | {
3 | ${2}
4 | }, ${1:delayInms})
5 | ]]>
6 | sto
7 | source.js,source.jsx,source.ts,source.tsx
8 | setTimeOut
9 |
--------------------------------------------------------------------------------
/snippets/setupReactComponentTestWithRedux.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 | ', () => {
10 | const defaultProps = {}
11 | const wrapper = renderer.create(
12 |
13 | <${1:${TM_FILENAME_BASE}} {...defaultProps} />
14 | ,
15 | )
16 |
17 | test('render', () => {
18 | expect(wrapper).toMatchSnapshot()
19 | })
20 | })
21 | ]]>
22 | srtest
23 | source.js,source.jsx,source.ts,source.tsx
24 | setupReactComponentTestWithRedux
25 |
--------------------------------------------------------------------------------
/snippets/setupReactNativeTest.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 | ', () => {
9 | const defaultProps = {}
10 | const wrapper = renderer.create(<${1:${TM_FILENAME_BASE}} {...defaultProps} />)
11 |
12 | test('render', () => {
13 | expect(wrapper).toMatchSnapshot()
14 | })
15 | })
16 | ]]>
17 | sntest
18 | source.js,source.jsx,source.ts,source.tsx
19 | setupReactNativeTest
20 |
--------------------------------------------------------------------------------
/snippets/setupReactNativeTestWithRedux.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 | ', () => {
11 | const defaultProps = {}
12 | const wrapper = renderer.create(
13 |
14 | <${1:${TM_FILENAME_BASE}} {...defaultProps} />
15 | ,
16 | )
17 |
18 | test('render', () => {
19 | expect(wrapper).toMatchSnapshot()
20 | })
21 | })
22 | ]]>
23 | snrtest
24 | source.js,source.jsx,source.ts,source.tsx
25 | setupReactNativeTestWithRedux
26 |
--------------------------------------------------------------------------------
/snippets/setupReactTest.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 | ', () => {
8 | const defaultProps = {}
9 | const wrapper = renderer.create(<${1:${TM_FILENAME_BASE}} {...defaultProps} />)
10 |
11 | test('render', () => {
12 | expect(wrapper).toMatchSnapshot()
13 | })
14 | })
15 | ]]>
16 | stest
17 | source.js,source.jsx,source.ts,source.tsx
18 | setupReactTest
19 |
--------------------------------------------------------------------------------
/snippets/shouldComponentUpdate.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
6 | scu
7 | source.js,source.jsx,source.ts,source.tsx
8 | shouldComponentUpdate
9 |
--------------------------------------------------------------------------------
/snippets/staticPropTpyes.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
6 | ptypes
7 | source.js,source.jsx,source.ts,source.tsx
8 | staticPropTpyes
9 |
--------------------------------------------------------------------------------
/snippets/testBlock.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 | {
3 | $0
4 | })
5 | ]]>
6 | test
7 | source.js,source.jsx,source.ts,source.tsx
8 | testBlock
9 |
--------------------------------------------------------------------------------
/snippets/useCallback.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 | {
4 | ${1:callback}
5 | },
6 | [${2:input}],
7 | )]]>
8 | useCallback
9 | source.js,source.jsx,source.ts,source.tsx
10 | useCallback
11 |
--------------------------------------------------------------------------------
/snippets/useContext.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
3 | useContext
4 | source.js,source.jsx,source.ts,source.tsx
5 | useContext
6 |
--------------------------------------------------------------------------------
/snippets/useDebugValue.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
3 | useDebugValue
4 | source.js,source.jsx,source.ts,source.tsx
5 | useDebugValue
6 |
--------------------------------------------------------------------------------
/snippets/useEffect.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 | {
3 | return () => {
4 | ${1:effect}
5 | };
6 | }, [${2:input}])]]>
7 | useEffect
8 | source.js,source.jsx,source.ts,source.tsx
9 | useEffect
10 |
--------------------------------------------------------------------------------
/snippets/useImperativeHandle.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 | {
5 | ${2:handler}
6 | },
7 | [${3:input}],
8 | )]]>
9 | useImperativeHandle
10 | source.js,source.jsx,source.ts,source.tsx
11 | useImperativeHandle
12 |
--------------------------------------------------------------------------------
/snippets/useLayoutEffect.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 | {
3 | return () => {
4 | ${1:effect}
5 | },
6 | [${2:input}]
7 | })]]>
8 | useLayoutEffect
9 | source.js,source.jsx,source.ts,source.tsx
10 | useLayoutEffect
11 |
--------------------------------------------------------------------------------
/snippets/useMemo.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 | ${1:function}, ${2:input})]]>
3 | useMemo
4 | source.js,source.jsx,source.ts,source.tsx
5 | useMemo
6 |
--------------------------------------------------------------------------------
/snippets/useReducer.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
3 | useReducer
4 | source.js,source.jsx,source.ts,source.tsx
5 | useReducer
6 |
--------------------------------------------------------------------------------
/snippets/useRef.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
3 | useRef
4 | source.js,source.jsx,source.ts,source.tsx
5 | useRef
6 |
--------------------------------------------------------------------------------
/snippets/useState.sublime-snippet:
--------------------------------------------------------------------------------
1 |
2 |
3 | useState
4 | source.js,source.jsx,source.ts,source.tsx
5 | useState
6 |
--------------------------------------------------------------------------------
/src/index.js:
--------------------------------------------------------------------------------
1 | import fs from 'fs';
2 | import snippets from './snippets.json';
3 |
4 | /**
5 | * Various replacement patterns
6 | * @param {string} unparsed code snippet
7 | * @return {string} parsed code snippet
8 | */
9 | const parseSnippet = text => {
10 | const parsedText = text
11 | .replace('TM_FILENAME_BASE', 'TM_FILENAME/(.+)\\..+|.*/$1/:name')
12 | .replace(', { Component }', '') // Avoid importing Component and PureComponent separately
13 | .replace(', { PureComponent }', '')
14 | .replace('extends Component', 'extends React.Component')
15 | .replace('extends PureComponent', 'extends React.PureComponent')
16 | .replace(
17 | 'const [${1:state}, set${1/(.*)/${1:/capitalize}/}] = useState(${2:initialState})',
18 | 'const [${1:state}, set${2:State}] = useState(${3:initialState})',
19 | );
20 |
21 | return parsedText;
22 | };
23 |
24 | /**
25 | * Get the actually code snippet and parse to fit Sublime snippet format
26 | * @param {string} body
27 | */
28 | const getContent = body => {
29 | let sublimeContent = '';
30 | if (typeof body === 'string') {
31 | sublimeContent = body;
32 | } else {
33 | // Some are stored as json arrays and needs to be reduced into a text snippet
34 | sublimeContent = body.reduce((total, current) => `${total}\n${current}`);
35 | }
36 |
37 | const parsedSublimeContent = parseSnippet(sublimeContent);
38 |
39 | return ``;
40 | };
41 |
42 | /**
43 | * Get the tab trigger word
44 | * @param {string} prefix
45 | */
46 | const getTabTrigger = prefix => `${prefix}`;
47 |
48 | /**
49 | * Get the scope field (defaults to scoure.js)
50 | */
51 | const getScope = () => `source.js,source.jsx,source.ts,source.tsx`;
52 |
53 | /**
54 | * Get the description field
55 | * @param {string} description
56 | */
57 | const getDescription = key => `${parseSnippet(key)}`;
58 |
59 | /**
60 | * Putting the xml tags togehter in the sublime snippet format
61 | * @param {string} content
62 | * @param {string} tabTrigger
63 | * @param {string} scope
64 | * @param {string} description [description]
65 | */
66 | const getSnippet = (content, tabTrigger, scope, description) => `
67 | ${content}
68 | ${tabTrigger}
69 | ${scope}
70 | ${description}
71 | `;
72 |
73 | /**
74 | * Generate the file anem
75 | * @param {string} key
76 | */
77 | const getFilename = key => {
78 | let sublimeFilename = parseSnippet(key);
79 | sublimeFilename = sublimeFilename.replace(/ /g, '').replace(/[^\w.]/g, '');
80 | return `${sublimeFilename}.sublime-snippet`;
81 | };
82 |
83 | /**
84 | * Generate the snippets by iterating over the object items from the snippets.json file
85 | */
86 | const generateSnippets = () => {
87 | for (const key in snippets) {
88 | if (!snippets.hasOwnProperty(key)) continue;
89 | const { prefix, body, description } = snippets[key];
90 | const fileName = getFilename(key);
91 |
92 | try {
93 | const sublimeContent = getContent(body);
94 | const sublimeTabTrigger = getTabTrigger(prefix);
95 | const sublimeScope = getScope();
96 | const sublimeDescription = getDescription(key);
97 | const sublimeSnippet = getSnippet(
98 | sublimeContent,
99 | sublimeTabTrigger,
100 | sublimeScope,
101 | sublimeDescription,
102 | );
103 |
104 | fs.writeFile(`./snippets/${fileName}`, sublimeSnippet, function(err) {
105 | if (err) {
106 | return console.log(`Error occured writing: ${fileName}`);
107 | }
108 | console.log(`${fileName} added.`);
109 | });
110 | } catch (err) {
111 | console.log(`Error occured creating: ${fileName} ${err}`);
112 | }
113 | }
114 | };
115 |
116 | generateSnippets();
117 |
--------------------------------------------------------------------------------
/src/snippets.json:
--------------------------------------------------------------------------------
1 | {
2 | "import": {
3 | "prefix": "imp",
4 | "body": "import ${2:moduleName} from '${1:module}'$0"
5 | },
6 | "importNoModuleName": {
7 | "prefix": "imn",
8 | "body": "import '${1:module}'$0"
9 | },
10 | "importDestructing": {
11 | "prefix": "imd",
12 | "body": "import { $2 } from '${1:module}'$0"
13 | },
14 | "importEverything": {
15 | "prefix": "ime",
16 | "body": "import * as ${2:alias} from '${1:module}'$0"
17 | },
18 | "importAs": {
19 | "prefix": "ima",
20 | "body": "import { ${2:originalName} as ${3:alias} } from '${1:module}'$0"
21 | },
22 | "exportDefault": {
23 | "prefix": "exp",
24 | "body": "export default $1$0"
25 | },
26 | "exportDestructing": {
27 | "prefix": "exd",
28 | "body": "export { $2 } from '${1:module}'$0"
29 | },
30 | "exportAs": {
31 | "prefix": "exa",
32 | "body": "export { ${2:originalName} as ${3:alias} } from '${1:module}'$0"
33 | },
34 | "exportNamedFunction": {
35 | "prefix": "enf",
36 | "body": [
37 | "export const ${1:functionName} = (${2:params}) => {",
38 | "\t$0",
39 | "}",
40 | ""
41 | ],
42 | "description": "Export named function in ES7 syntax"
43 | },
44 | "exportDefaultFunction": {
45 | "prefix": "edf",
46 | "body": ["export default (${1:params}) => {", "\t$0", "}", ""],
47 | "description": "Export default function in ES7 syntax"
48 | },
49 | "method": {
50 | "prefix": "met",
51 | "body": ["${1:methodName} = (${2:params}) => {", "\t${0}", "}", ""],
52 | "description": "Creates a method inside a class in ES7 syntax"
53 | },
54 | "propertyGet": {
55 | "prefix": "pge",
56 | "body": ["get ${1:propertyName}() {", "\treturn this.${0}", "}", ""],
57 | "description": "Creates a getter property inside a class in ES7 syntax"
58 | },
59 | "propertySet": {
60 | "prefix": "pse",
61 | "body": ["set ${1:propertyName}(${2:value}) {", "\t${0}", "}", ""],
62 | "description": "Creates a setter property inside a class in ES7 syntax"
63 | },
64 | "forEach": {
65 | "prefix": "fre",
66 | "body": ["${1:array}.forEach(${2:currentItem} => {", "\t${0}", "})", ""],
67 | "description": "Creates a forEach statement in ES7 syntax"
68 | },
69 | "forOf": {
70 | "prefix": "fof",
71 | "body": ["for(let ${1:item} of ${2:object}) {", "\t${0}", "}", ""],
72 | "description": "Iterating over property names of iterable objects"
73 | },
74 | "forIn": {
75 | "prefix": "fin",
76 | "body": ["for(let ${1:item} in ${2:object}) {", "\t${0}", "}", ""],
77 | "description": "Iterating over property values of iterable objects"
78 | },
79 | "anonymousFunction": {
80 | "prefix": "anfn",
81 | "body": ["(${1:params}) => {", "\t${2}", "}", ""],
82 | "description": "Creates an anonymous function in ES7 syntax"
83 | },
84 | "namedFunction": {
85 | "prefix": "nfn",
86 | "body": ["const ${1:name} = (${2:params}) => {", "\t${3}", "}", ""],
87 | "description": "Creates a named function in ES7 syntax"
88 | },
89 | "destructingObject": {
90 | "prefix": "dob",
91 | "body": "const {${1:propertyName}} = ${2:objectToDestruct}",
92 | "description": "Creates and assigns a local variable using object destructing"
93 | },
94 | "destructingArray": {
95 | "prefix": "dar",
96 | "body": "const [${1:propertyName}] = ${2:arrayToDestruct}",
97 | "description": "Creates and assigns a local variable using array destructing"
98 | },
99 | "setInterval": {
100 | "prefix": "sti",
101 | "body": ["setInterval(() => {", "\t${2}", "}, ${0:intervalInms})", ""],
102 | "description": "Executes the given function at specified intervals in ES7 syntax"
103 | },
104 | "setTimeOut": {
105 | "prefix": "sto",
106 | "body": ["setTimeout(() => {", "\t${2}", "}, ${1:delayInms})", ""],
107 | "description": "Executes the given function after the specified delay in ES7 syntax"
108 | },
109 | "promise": {
110 | "prefix": "prom",
111 | "body": ["return new Promise((resolve, reject) => {", "\t${1}", "})", ""],
112 | "description": "Creates and returns a new Promise in the standard ES7 syntax"
113 | },
114 | "consoleAssert": {
115 | "prefix": "cas",
116 | "body": "console.assert(${1:expression}, ${2:object})",
117 | "description": "If the specified expression is false, the message is written to the console along with a stack trace"
118 | },
119 | "consoleClear": {
120 | "prefix": "ccl",
121 | "body": "console.clear()",
122 | "description": "Clears the console"
123 | },
124 | "consoleCount": {
125 | "prefix": "cco",
126 | "body": "console.count(${1:label})",
127 | "description": "Writes the the number of times that count() has been invoked at the same line and with the same label"
128 | },
129 | "consoleDir": {
130 | "prefix": "cdi",
131 | "body": "console.dir(${1:object})",
132 | "description": "Prints a JavaScript representation of the specified object"
133 | },
134 | "consoleError": {
135 | "prefix": "cer",
136 | "body": "console.error(${1:object})",
137 | "description": "Displays a message in the console and also includes a stack trace from where the method was called"
138 | },
139 | "consoleGroup": {
140 | "prefix": "cgr",
141 | "body": "console.group(\"${1:label}\")",
142 | "description": "Groups and indents all following output by an additional level, until console.groupEnd() is called."
143 | },
144 | "consoleGroupEnd": {
145 | "prefix": "cge",
146 | "body": "console.groupEnd()",
147 | "description": "Closes out the corresponding console.group()."
148 | },
149 | "consoleLog": {
150 | "prefix": "clg",
151 | "body": "console.log(${1:object})",
152 | "description": "Displays a message in the console"
153 | },
154 | "consoleTrace": {
155 | "prefix": "ctr",
156 | "body": "console.trace(${1:object})",
157 | "description": "Prints a stack trace from the point where the method was called"
158 | },
159 | "consoleLogObject": {
160 | "prefix": "clo",
161 | "body": "console.log('${1:object}', ${1:object})",
162 | "description": "Logs property with name."
163 | },
164 | "consoleTime": {
165 | "prefix": "ctm",
166 | "body": "console.time('${1:object}')",
167 | "description": "Console time wrapper"
168 | },
169 | "consoleTimeEnd": {
170 | "prefix": "cte",
171 | "body": "console.timeEnd('${1:object}')",
172 | "description": "Console time end wrapper"
173 | },
174 | "consoleWarn": {
175 | "prefix": "cwa",
176 | "body": "console.warn(${1:object})",
177 | "description": "Displays a message in the console but also displays a yellow warning icon along with the logged message"
178 | },
179 | "consoleInfo": {
180 | "prefix": "cin",
181 | "body": "console.info(${1:object})",
182 | "description": "Displays a message in the console but also displays a blue information icon along with the logged message"
183 | },
184 | "destructProps": {
185 | "prefix": "cp",
186 | "body": ["const { $1 } = this.props"],
187 | "description": "Creates and assigns a local variable using props destructing"
188 | },
189 | "destructState": {
190 | "prefix": "cs",
191 | "body": ["const { $1 } = this.state"],
192 | "description": "Creates and assigns a local variable using state destructing"
193 | },
194 | "import React": {
195 | "prefix": "imr",
196 | "body": ["import React from 'react'", ""]
197 | },
198 | "import ReactDOM": {
199 | "prefix": "imrd",
200 | "body": ["import ReactDOM from 'react-dom'", ""]
201 | },
202 | "import React, { Component }": {
203 | "prefix": "imrc",
204 | "body": ["import React, { Component } from 'react'", ""]
205 | },
206 | "import React, { Component } & PropTypes": {
207 | "prefix": "imrcp",
208 | "body": [
209 | "import React, { Component } from 'react'",
210 | "import PropTypes from 'prop-types'",
211 | ""
212 | ]
213 | },
214 | "import React, { PureComponent }": {
215 | "prefix": "imrpc",
216 | "body": ["import React, { PureComponent } from 'react'", ""]
217 | },
218 | "import React, { PureComponent } & PropTypes": {
219 | "prefix": "imrpcp",
220 | "body": [
221 | "import React, { PureComponent } from 'react'",
222 | "import PropTypes from 'prop-types'",
223 | ""
224 | ]
225 | },
226 | "import React, { memo }": {
227 | "prefix": "imrm",
228 | "body": ["import React, { memo } from 'react'", ""]
229 | },
230 | "import React, { memo } & PropTypes": {
231 | "prefix": "imrmp",
232 | "body": [
233 | "import React, { memo } from 'react'",
234 | "import PropTypes from 'prop-types'",
235 | ""
236 | ]
237 | },
238 | "import PropTypes": {
239 | "prefix": "impt",
240 | "body": ["import PropTypes from 'prop-types'", ""]
241 | },
242 | "import React Router": {
243 | "prefix": "imrr",
244 | "body": [
245 | "import { BrowserRouter as Router, Route, Link } from 'react-router-dom'",
246 | ""
247 | ]
248 | },
249 | "import redux statement": {
250 | "prefix": "redux",
251 | "body": ["import { connect } from 'react-redux'", ""]
252 | },
253 | "reactClassCompoment": {
254 | "prefix": "rcc",
255 | "body": [
256 | "import React, { Component } from 'react'",
257 | "",
258 | "export default class ${1:${TM_FILENAME_BASE}} extends Component {",
259 | "\trender() {",
260 | "\t\treturn (",
261 | "\t\t\t",
262 | "\t\t\t\t$0",
263 | "\t\t\t
",
264 | "\t\t)",
265 | "\t}",
266 | "}",
267 | ""
268 | ],
269 | "description": "Creates a React component class with ES7 module system"
270 | },
271 | "reactClassExportComponent": {
272 | "prefix": "rce",
273 | "body": [
274 | "import React, { Component } from 'react'",
275 | "",
276 | "export class ${1:${TM_FILENAME_BASE}} extends Component {",
277 | "\trender() {",
278 | "\t\treturn (",
279 | "\t\t\t",
280 | "\t\t\t\t$0",
281 | "\t\t\t
",
282 | "\t\t)",
283 | "\t}",
284 | "}",
285 | "",
286 | "export default ${1:${TM_FILENAME_BASE}}",
287 | ""
288 | ],
289 | "description": "Creates a React component class with ES7 module system"
290 | },
291 | "reactFunctionalExportComponent": {
292 | "prefix": "rfce",
293 | "body": [
294 | "import React from 'react'",
295 | "",
296 | "function ${1:${TM_FILENAME_BASE}}() {",
297 | "\treturn (",
298 | "\t\t",
299 | "\t\t\t$0",
300 | "\t\t
",
301 | "\t)",
302 | "}",
303 | "",
304 | "export default ${1:${TM_FILENAME_BASE}}",
305 | ""
306 | ],
307 | "description": "Creates a React Functional Component with ES7 module system"
308 | },
309 | "reactFunctionalComponent": {
310 | "prefix": "rfc",
311 | "body": [
312 | "import React from 'react'",
313 | "",
314 | "export default function ${1:${TM_FILENAME_BASE}}() {",
315 | "\treturn (",
316 | "\t\t",
317 | "\t\t\t$0",
318 | "\t\t
",
319 | "\t)",
320 | "}",
321 | ""
322 | ],
323 | "description": "Creates a React Functional Component with ES7 module system"
324 | },
325 | "reactFunctionalComponentWithPropTypes": {
326 | "prefix": "rfcp",
327 | "body": [
328 | "import React from 'react'",
329 | "import PropTypes from 'prop-types'",
330 | "",
331 | "function ${1:${TM_FILENAME_BASE}}(props) {",
332 | "\treturn (",
333 | "\t\t",
334 | "\t\t\t$0",
335 | "\t\t
",
336 | "\t)",
337 | "}",
338 | "",
339 | "${1:${TM_FILENAME_BASE}}.propTypes = {",
340 | "",
341 | "}",
342 | "",
343 | "export default ${1:${TM_FILENAME_BASE}}",
344 | "",
345 | ""
346 | ],
347 | "description": "Creates a React Functional Component with ES7 module system with PropTypes"
348 | },
349 | "reactArrowFunctionComponent": {
350 | "prefix": ["rafc", "rafce"],
351 | "body": [
352 | "import React from 'react'",
353 | "",
354 | "const ${1:${TM_FILENAME_BASE}} = () => {",
355 | "\treturn (",
356 | "\t\t",
357 | "\t\t\t$0",
358 | "\t\t
",
359 | "\t)",
360 | "}",
361 | "",
362 | "export default ${1:${TM_FILENAME_BASE}}",
363 | ""
364 | ],
365 | "description": "Creates a React Arrow Function Component with ES7 module system"
366 | },
367 | "reactArrowFunctionComponentWithPropTypes": {
368 | "prefix": "rafcp",
369 | "body": [
370 | "import React from 'react'",
371 | "import PropTypes from 'prop-types'",
372 | "",
373 | "const ${1:${TM_FILENAME_BASE}} = props => {",
374 | "\treturn (",
375 | "\t\t",
376 | "\t\t\t$0",
377 | "\t\t
",
378 | "\t)",
379 | "}",
380 | "",
381 | "${1:${TM_FILENAME_BASE}}.propTypes = {",
382 | "",
383 | "}",
384 | "",
385 | "export default ${1:${TM_FILENAME_BASE}}",
386 | ""
387 | ],
388 | "description": "Creates a React Arrow Function Component with ES7 module system with PropTypes"
389 | },
390 | "reactClassExportComponentWithPropTypes": {
391 | "prefix": "rcep",
392 | "body": [
393 | "import React, { Component } from 'react'",
394 | "import PropTypes from 'prop-types'",
395 | "",
396 | "export class ${1:${TM_FILENAME_BASE}} extends Component {",
397 | "\tstatic propTypes = {",
398 | "",
399 | "\t}",
400 | "",
401 | "\trender() {",
402 | "\t\treturn (",
403 | "\t\t\t",
404 | "\t\t\t\t$0",
405 | "\t\t\t
",
406 | "\t\t)",
407 | "\t}",
408 | "}",
409 | "",
410 | "export default ${1:${TM_FILENAME_BASE}}",
411 | ""
412 | ],
413 | "description": "Creates a React component class with ES7 module system"
414 | },
415 | "reactClassPureComponent": {
416 | "prefix": "rpc",
417 | "body": [
418 | "import React, { PureComponent } from 'react'",
419 | "",
420 | "export default class ${1:${TM_FILENAME_BASE}} extends PureComponent {",
421 | "\trender() {",
422 | "\t\treturn (",
423 | "\t\t\t",
424 | "\t\t\t\t$0",
425 | "\t\t\t
",
426 | "\t\t)",
427 | "\t}",
428 | "}",
429 | ""
430 | ],
431 | "description": "Creates a React pure component class with ES7 module system"
432 | },
433 | "reactClassExportPureComponent": {
434 | "prefix": "rpce",
435 | "body": [
436 | "import React, { PureComponent } from 'react'",
437 | "",
438 | "export class ${1:${TM_FILENAME_BASE}} extends PureComponent {",
439 | "\trender() {",
440 | "\t\treturn (",
441 | "\t\t\t",
442 | "\t\t\t\t$0",
443 | "\t\t\t
",
444 | "\t\t)",
445 | "\t}",
446 | "}",
447 | "",
448 | "export default ${1:$TM_FILENAME_BASE}",
449 | ""
450 | ],
451 | "description": "Creates a React pure component class with ES7 module system export"
452 | },
453 | "reactClassPureComponentWithPropTypes": {
454 | "prefix": "rpcp",
455 | "body": [
456 | "import React, { PureComponent } from 'react'",
457 | "import PropTypes from 'prop-types'",
458 | "",
459 | "export default class ${1:${TM_FILENAME_BASE}} extends PureComponent {",
460 | "\tstatic propTypes = {",
461 | "",
462 | "\t}",
463 | "",
464 | "\trender() {",
465 | "\t\treturn (",
466 | "\t\t\t",
467 | "\t\t\t\t$0",
468 | "\t\t\t
",
469 | "\t\t)",
470 | "\t}",
471 | "}",
472 | ""
473 | ],
474 | "description": "Creates a React component class with ES7 module system"
475 | },
476 | "reactFunctionMemoComponent": {
477 | "prefix": "rmc",
478 | "body": [
479 | "import React, { memo } from 'react'",
480 | "",
481 | "export default memo(function ${1:${TM_FILENAME_BASE}}() {",
482 | "\treturn (",
483 | "\t\t",
484 | "\t\t\t$0",
485 | "\t\t
",
486 | "\t)",
487 | "})",
488 | ""
489 | ],
490 | "description": "Creates a React Memo Function Component with ES7 module system"
491 | },
492 | "reactFunctionMemoComponentWithPropTypes": {
493 | "prefix": "rmcp",
494 | "body": [
495 | "import React, { memo } from 'react'",
496 | "import PropTypes from 'prop-types'",
497 | "",
498 | "const ${1:${TM_FILENAME_BASE}} = memo(function ${1:${TM_FILENAME_BASE}}(props) {",
499 | "\treturn (",
500 | "\t\t",
501 | "\t\t\t$0",
502 | "\t\t
",
503 | "\t)",
504 | "})",
505 | "",
506 | "${1:${TM_FILENAME_BASE}}.propTypes = {",
507 | "",
508 | "}",
509 | "",
510 | "export default ${1:${TM_FILENAME_BASE}}",
511 | ""
512 | ],
513 | "description": "Creates a React Memo Function Component with ES7 module system with PropTypes"
514 | },
515 | "reactClassCompomentPropTypes": {
516 | "prefix": "rccp",
517 | "body": [
518 | "import React, { Component } from 'react'",
519 | "import PropTypes from 'prop-types'",
520 | "",
521 | "export default class ${1:${TM_FILENAME_BASE}} extends Component {",
522 | "\tstatic propTypes = {",
523 | "\t\t${2:prop}: ${3:PropTypes}",
524 | "\t}",
525 | "",
526 | "\trender() {",
527 | "\t\treturn (",
528 | "\t\t\t",
529 | "\t\t\t\t$0",
530 | "\t\t\t
",
531 | "\t\t)",
532 | "\t}",
533 | "}",
534 | ""
535 | ],
536 | "description": "Creates a React component class with PropTypes and ES7 module system"
537 | },
538 | "reactClassCompomentRedux": {
539 | "prefix": "rcredux",
540 | "body": [
541 | "import React, { Component } from 'react'",
542 | "import PropTypes from 'prop-types'",
543 | "import { connect } from 'react-redux'",
544 | "",
545 | "export class ${1:${TM_FILENAME_BASE}} extends Component {",
546 | "\tstatic propTypes = {",
547 | "\t\t${2:prop}: ${3:PropTypes}",
548 | "\t}",
549 | "",
550 | "\trender() {",
551 | "\t\treturn (",
552 | "\t\t\t",
553 | "\t\t\t\t$0",
554 | "\t\t\t
",
555 | "\t\t)",
556 | "\t}",
557 | "}",
558 | "",
559 | "const mapStateToProps = (state) => ({",
560 | "\t",
561 | "})",
562 | "",
563 | "const mapDispatchToProps = {",
564 | "\t",
565 | "}",
566 | "",
567 | "export default connect(mapStateToProps, mapDispatchToProps)(${1:${TM_FILENAME_BASE}})",
568 | ""
569 | ],
570 | "description": "Creates a React component class with PropTypes with connected redux and ES7 module system"
571 | },
572 | "mappingToProps": {
573 | "prefix": "reduxmap",
574 | "body": [
575 | "const mapStateToProps = (state) => ({",
576 | "\t${1}",
577 | "})",
578 | "",
579 | "const mapDispatchToProps = {",
580 | "\t",
581 | "}",
582 | ""
583 | ]
584 | },
585 | "classConstructor": {
586 | "prefix": "rconst",
587 | "body": [
588 | "constructor(props) {",
589 | "\tsuper(props)",
590 | "",
591 | "\tthis.state = {",
592 | "\t\t $0",
593 | "\t}",
594 | "}",
595 | ""
596 | ],
597 | "description": "Adds a default constructor for it('', () => {})the class that contains props as arguments"
598 | },
599 | "emptyState": {
600 | "prefix": "est",
601 | "body": ["state = {", "\t$1", "}", ""],
602 | "description": "Creates empty state object. To be used in a constructor."
603 | },
604 | "componentWillMount": {
605 | "prefix": "cwm",
606 | "body": ["componentWillMount() {", "\t$0", "}", ""],
607 | "description": "DEPRECATED!!!. Invoked once, both on the client and server, immediately before the initial rendering occurs"
608 | },
609 | "componentDidMount": {
610 | "prefix": "cdm",
611 | "body": ["componentDidMount() {", "\t$0", "}", ""],
612 | "description": "Invoked once, only on the client (not on the server), immediately after the initial rendering occurs."
613 | },
614 | "componentWillReceiveProps": {
615 | "prefix": "cwr",
616 | "body": ["componentWillReceiveProps(nextProps) {", "\t$0", "}", ""],
617 | "description": "DEPRECATED!!!. Invoked when a component is receiving new props. This method is not called for the initial render."
618 | },
619 | "shouldComponentUpdate": {
620 | "prefix": "scu",
621 | "body": ["shouldComponentUpdate(nextProps, nextState) {", "\t$0", "}", ""],
622 | "description": "Invoked before rendering when new props or state are being received. "
623 | },
624 | "componentWillUpdate": {
625 | "prefix": "cwup",
626 | "body": ["componentWillUpdate(nextProps, nextState) {", "\t$0", "}", ""],
627 | "description": "DEPRECATED!!!. Invoked immediately before rendering when new props or state are being received."
628 | },
629 | "componentDidUpdate": {
630 | "prefix": "cdup",
631 | "body": ["componentDidUpdate(prevProps, prevState) {", "\t$0", "}", ""],
632 | "description": "Invoked immediately after the component's updates are flushed to the DOM."
633 | },
634 | "componentWillUnmount": {
635 | "prefix": "cwun",
636 | "body": ["componentWillUnmount() {", "\t$0", "}", ""],
637 | "description": "Invoked immediately before a component is unmounted from the DOM."
638 | },
639 | "getDerivedStateFromProps": {
640 | "prefix": "gdsfp",
641 | "body": ["static getDerivedStateFromProps(props, state) {", "\t${1}", "}"],
642 | "description": "Invoked right before calling the render method, both on the initial mount and on subsequent updates."
643 | },
644 | "getSnapshotBeforeUpdate": {
645 | "prefix": "gsbu",
646 | "body": [
647 | "getSnapshotBeforeUpdate = (prevProps, prevState) => {",
648 | "\t$0",
649 | "}",
650 | ""
651 | ],
652 | "description": "Called right before mutations are made (e.g. before the DOM is updated)"
653 | },
654 | "componentRender": {
655 | "prefix": "ren",
656 | "body": [
657 | "render() {",
658 | "\treturn (",
659 | "\t\t",
660 | "\t\t\t$0",
661 | "\t\t
",
662 | "\t)",
663 | "}"
664 | ],
665 | "description": "Basic render."
666 | },
667 | "createContext": {
668 | "prefix": "rcontext",
669 | "body": ["const ${1:contextName} = React.createContext()", ""],
670 | "description": "Create React context"
671 | },
672 | "createRef": {
673 | "prefix": "cref",
674 | "body": ["this.${1:refName}Ref = React.createRef()", ""],
675 | "description": "Create ref statement used inside constructor"
676 | },
677 | "forwardRef": {
678 | "prefix": "fref",
679 | "body": ["const ref = React.createRef()", ""],
680 | "description": "Forward ref statement used inside component"
681 | },
682 | "componentSetStateObject": {
683 | "prefix": "sst",
684 | "body": "this.setState({$0})",
685 | "description": "Performs a shallow merge of nextState into current state"
686 | },
687 | "componentSetStateFunc": {
688 | "prefix": "ssf",
689 | "body": ["this.setState((state, props) => { return { $0 }})", ""],
690 | "description": "Performs a shallow merge of nextState into current state"
691 | },
692 | "componentProps": {
693 | "prefix": "props",
694 | "body": "this.props.$0",
695 | "description": "Access component's props"
696 | },
697 | "componentState": {
698 | "prefix": "state",
699 | "body": "this.state.$0"
700 | },
701 | "bindThis": {
702 | "prefix": "bnd",
703 | "body": "this.${1:methodName} = this.${1:methodName}.bind(this)$0",
704 | "description": "Binds this to a method"
705 | },
706 | "reduxAction": {
707 | "prefix": "rxaction",
708 | "body": [
709 | "export const ${1:actionName} = (payload) => ({",
710 | "\ttype: ${3:type},",
711 | "\tpayload",
712 | "})",
713 | ""
714 | ]
715 | },
716 | "reduxConst": {
717 | "prefix": "rxconst",
718 | "body": "export const ${1:constantName} = '${1:constantName}'"
719 | },
720 | "reduxReducer": {
721 | "prefix": "rxreducer",
722 | "body": [
723 | "const initialState = {",
724 | "",
725 | "}",
726 | "",
727 | "export default (state = initialState, { type, payload }) => {",
728 | "\tswitch (type) {",
729 | "",
730 | "\tcase ${1:typeName}:",
731 | "\t\treturn { ...state, ...payload }",
732 | "",
733 | "\tdefault:",
734 | "\t\treturn state",
735 | "\t}",
736 | "}",
737 | ""
738 | ]
739 | },
740 | "reduxSelector": {
741 | "prefix": "rxselect",
742 | "body": [
743 | "import { createSelector } from 'reselect'",
744 | "",
745 | "export const ${1:selectorName} = state => state.${2:selector}",
746 | ""
747 | ]
748 | },
749 | "reactNativeComponent": {
750 | "prefix": "rnc",
751 | "body": [
752 | "import React, { Component } from 'react'",
753 | "import { Text, View } from 'react-native'",
754 | "",
755 | "export default class ${1:${TM_FILENAME_BASE}} extends Component {",
756 | "\trender() {",
757 | "\t\treturn (",
758 | "\t\t\t",
759 | "\t\t\t\t ${2:textInComponent} ",
760 | "\t\t\t",
761 | "\t\t)",
762 | "\t}",
763 | "}",
764 | ""
765 | ]
766 | },
767 | "reactNativeComponentWithStyles": {
768 | "prefix": "rncs",
769 | "body": [
770 | "import React, { Component } from 'react'",
771 | "import { Text, StyleSheet, View } from 'react-native'",
772 | "",
773 | "export default class ${1:${TM_FILENAME_BASE}} extends Component {",
774 | "\trender() {",
775 | "\t\treturn (",
776 | "\t\t\t",
777 | "\t\t\t\t ${2:textInComponent} ",
778 | "\t\t\t",
779 | "\t\t)",
780 | "\t}",
781 | "}",
782 | "",
783 | "const styles = StyleSheet.create({})",
784 | ""
785 | ]
786 | },
787 | "reactNativeComponentExport": {
788 | "prefix": "rnce",
789 | "body": [
790 | "import React, { Component } from 'react'",
791 | "import { Text, View } from 'react-native'",
792 | "",
793 | "export class ${1:${TM_FILENAME_BASE}} extends Component {",
794 | "\trender() {",
795 | "\t\treturn (",
796 | "\t\t\t",
797 | "\t\t\t\t ${2:textInComponent} ",
798 | "\t\t\t",
799 | "\t\t)",
800 | "\t}",
801 | "}",
802 | "",
803 | "export default ${1:${TM_FILENAME_BASE}}",
804 | ""
805 | ]
806 | },
807 | "reactNativePureComponent": {
808 | "prefix": "rnpc",
809 | "body": [
810 | "import React, { PureComponent } from 'react'",
811 | "import { Text, View } from 'react-native'",
812 | "",
813 | "export default class ${1:${TM_FILENAME_BASE}} extends PureComponent {",
814 | "\trender() {",
815 | "\t\treturn (",
816 | "\t\t\t",
817 | "\t\t\t\t ${2:textInComponent} ",
818 | "\t\t\t",
819 | "\t\t)",
820 | "\t}",
821 | "}",
822 | ""
823 | ]
824 | },
825 | "reactNativePureComponentExport": {
826 | "prefix": "rnpce",
827 | "body": [
828 | "import React, { PureComponent } from 'react'",
829 | "import { Text, View } from 'react-native'",
830 | "",
831 | "export class ${1:${TM_FILENAME_BASE}} extends PureComponent {",
832 | "\trender() {",
833 | "\t\treturn (",
834 | "\t\t\t",
835 | "\t\t\t\t ${2:textInComponent} ",
836 | "\t\t\t",
837 | "\t\t)",
838 | "\t}",
839 | "}",
840 | "",
841 | "export default ${1:${TM_FILENAME_BASE}}",
842 | ""
843 | ]
844 | },
845 | "reactNativeClassComponentRedux": {
846 | "prefix": "rncredux",
847 | "body": [
848 | "import React, { Component } from 'react'",
849 | "import { View, Text } from 'react-native'",
850 | "import PropTypes from 'prop-types'",
851 | "import { connect } from 'react-redux'",
852 | "",
853 | "export class ${1:${TM_FILENAME_BASE}} extends Component {",
854 | "\tstatic propTypes = {",
855 | "\t\t${2:prop}: ${3:PropTypes}",
856 | "\t}",
857 | "",
858 | "\trender() {",
859 | "\t\treturn (",
860 | "\t\t\t",
861 | "\t\t\t\t ${2:textInComponent} ",
862 | "\t\t\t",
863 | "\t\t)",
864 | "\t}",
865 | "}",
866 | "",
867 | "const mapStateToProps = (state) => ({",
868 | "\t",
869 | "})",
870 | "",
871 | "const mapDispatchToProps = {",
872 | "\t",
873 | "}",
874 | "",
875 | "export default connect(mapStateToProps, mapDispatchToProps)(${1:${TM_FILENAME_BASE}})",
876 | ""
877 | ],
878 | "description": "Creates a React Native component class with PropTypes with connected redux and ES7 module system"
879 | },
880 | "reactNativeArrowFunctionComponent": {
881 | "prefix": "rnf",
882 | "body": [
883 | "import React from 'react'",
884 | "import { View, Text } from 'react-native'",
885 | "",
886 | "const ${1:${TM_FILENAME_BASE}} = () => {",
887 | "\treturn (",
888 | "\t\t",
889 | "\t\t\t$0",
890 | "\t\t",
891 | "\t)",
892 | "}",
893 | "",
894 | "export default ${1:${TM_FILENAME_BASE}}",
895 | ""
896 | ]
897 | },
898 | "reactNativeImport": {
899 | "prefix": "imrn",
900 | "body": "import { ${1:moduleName} } from 'react-native'"
901 | },
902 | "reactNativeStyles": {
903 | "prefix": "rnstyle",
904 | "body": ["const styles = StyleSheet.create({", "\t${1:style}", "})", ""]
905 | },
906 | "propTypeArray": {
907 | "prefix": "pta",
908 | "body": "PropTypes.array,",
909 | "description": "Array prop type"
910 | },
911 | "propTypeArrayRequired": {
912 | "prefix": "ptar",
913 | "body": "PropTypes.array.isRequired,",
914 | "description": "Array prop type required"
915 | },
916 | "propTypeBool": {
917 | "prefix": "ptb",
918 | "body": "PropTypes.bool,",
919 | "description": "Bool prop type"
920 | },
921 | "propTypeBoolRequired": {
922 | "prefix": "ptbr",
923 | "body": "PropTypes.bool.isRequired,",
924 | "description": "Bool prop type required"
925 | },
926 | "propTypeFunc": {
927 | "prefix": "ptf",
928 | "body": "PropTypes.func,",
929 | "description": "Func prop type"
930 | },
931 | "propTypeFuncRequired": {
932 | "prefix": "ptfr",
933 | "body": "PropTypes.func.isRequired,",
934 | "description": "Func prop type required"
935 | },
936 | "propTypeNumber": {
937 | "prefix": "ptn",
938 | "body": "PropTypes.number,",
939 | "description": "Number prop type"
940 | },
941 | "propTypeNumberRequired": {
942 | "prefix": "ptnr",
943 | "body": "PropTypes.number.isRequired,",
944 | "description": "Number prop type required"
945 | },
946 | "propTypeObject": {
947 | "prefix": "pto",
948 | "body": "PropTypes.object,",
949 | "description": "Object prop type"
950 | },
951 | "propTypeObjectRequired": {
952 | "prefix": "ptor",
953 | "body": "PropTypes.object.isRequired,",
954 | "description": "Object prop type required"
955 | },
956 | "propTypeString": {
957 | "prefix": "pts",
958 | "body": "PropTypes.string,",
959 | "description": "String prop type"
960 | },
961 | "propTypeStringRequired": {
962 | "prefix": "ptsr",
963 | "body": "PropTypes.string.isRequired,",
964 | "description": "String prop type required"
965 | },
966 | "propTypeNode": {
967 | "prefix": "ptnd",
968 | "body": "PropTypes.node,",
969 | "description": "Anything that can be rendered: numbers, strings, elements or an array"
970 | },
971 | "propTypeNodeRequired": {
972 | "prefix": "ptndr",
973 | "body": "PropTypes.node.isRequired,",
974 | "description": "Anything that can be rendered: numbers, strings, elements or an array required"
975 | },
976 | "propTypeElement": {
977 | "prefix": "ptel",
978 | "body": "PropTypes.element,",
979 | "description": "React element prop type"
980 | },
981 | "propTypeElementRequired": {
982 | "prefix": "ptelr",
983 | "body": "PropTypes.element.isRequired,",
984 | "description": "React element prop type required"
985 | },
986 | "propTypeInstanceOf": {
987 | "prefix": "pti",
988 | "body": "PropTypes.instanceOf($0),",
989 | "description": "Is an instance of a class prop type"
990 | },
991 | "propTypeInstanceOfRequired": {
992 | "prefix": "ptir",
993 | "body": "PropTypes.instanceOf($0).isRequired,",
994 | "description": "Is an instance of a class prop type required"
995 | },
996 | "propTypeEnum": {
997 | "prefix": "pte",
998 | "body": "PropTypes.oneOf(['$0']),",
999 | "description": "Prop type limited to specific values by treating it as an enum"
1000 | },
1001 | "propTypeEnumRequired": {
1002 | "prefix": "pter",
1003 | "body": "PropTypes.oneOf(['$0']).isRequired,",
1004 | "description": "Prop type limited to specific values by treating it as an enum required"
1005 | },
1006 | "propTypeOneOfType": {
1007 | "prefix": "ptet",
1008 | "body": ["PropTypes.oneOfType([", "\t$0", "]),"],
1009 | "description": "An object that could be one of many types"
1010 | },
1011 | "propTypeOneOfTypeRequired": {
1012 | "prefix": "ptetr",
1013 | "body": ["PropTypes.oneOfType([", "\t$0", "]).isRequired,"],
1014 | "description": "An object that could be one of many types required"
1015 | },
1016 | "propTypeArrayOf": {
1017 | "prefix": "ptao",
1018 | "body": "PropTypes.arrayOf($0),",
1019 | "description": "An array of a certain type"
1020 | },
1021 | "propTypeArrayOfRequired": {
1022 | "prefix": "ptaor",
1023 | "body": "PropTypes.arrayOf($0).isRequired,",
1024 | "description": "An array of a certain type required"
1025 | },
1026 | "propTypeObjectOf": {
1027 | "prefix": "ptoo",
1028 | "body": "PropTypes.objectOf($0),",
1029 | "description": "An object with property values of a certain type"
1030 | },
1031 | "propTypeObjectOfRequired": {
1032 | "prefix": "ptoor",
1033 | "body": "PropTypes.objectOf($0).isRequired,",
1034 | "description": "An object with property values of a certain type required"
1035 | },
1036 | "propTypeShape": {
1037 | "prefix": "ptsh",
1038 | "body": ["PropTypes.shape({", "\t$0", "}),"],
1039 | "description": "An object taking on a particular shape"
1040 | },
1041 | "propTypeShapeRequired": {
1042 | "prefix": "ptshr",
1043 | "body": ["PropTypes.shape({", "\t$0", "}).isRequired,"],
1044 | "description": "An object taking on a particular shape required"
1045 | },
1046 | "staticPropTpyes": {
1047 | "prefix": "ptypes",
1048 | "body": ["static propTypes = {", "$0", "}", ""]
1049 | },
1050 | "propTypeAny": {
1051 | "prefix": "ptany",
1052 | "body": "PropTypes.any,",
1053 | "description": "Any prop type"
1054 | },
1055 | "Comment Big Block": {
1056 | "prefix": "cmmb",
1057 | "body": [
1058 | "/**",
1059 | "|--------------------------------------------------",
1060 | "| $1",
1061 | "|--------------------------------------------------",
1062 | "*/"
1063 | ]
1064 | },
1065 | "describeBlock": {
1066 | "prefix": "desc",
1067 | "body": ["describe('$1', () => {", "\t$0", "})", ""],
1068 | "description": "Testing `describe` block"
1069 | },
1070 | "testBlock": {
1071 | "prefix": "test",
1072 | "body": ["test('should $1', () => {", "\t$0", "})", ""],
1073 | "description": "Testing `test` block"
1074 | },
1075 | "itBlock": {
1076 | "prefix": "tit",
1077 | "body": ["it('should $1', () => {", "\t$0", "})", ""],
1078 | "description": "Testing `it` block"
1079 | },
1080 | "setupReactTest": {
1081 | "prefix": "stest",
1082 | "body": [
1083 | "import React from 'react'",
1084 | "import renderer from 'react-test-renderer'",
1085 | "",
1086 | "import { ${1:${TM_FILENAME_BASE}} } from '../${1:${TM_FILENAME_BASE}}'",
1087 | "",
1088 | "describe('<${1:${TM_FILENAME_BASE}} />', () => {",
1089 | "\tconst defaultProps = {}",
1090 | "\tconst wrapper = renderer.create(<${1:${TM_FILENAME_BASE}} {...defaultProps} />)",
1091 | "",
1092 | "\ttest('render', () => {",
1093 | "\t\texpect(wrapper).toMatchSnapshot()",
1094 | "\t})",
1095 | "})",
1096 | ""
1097 | ]
1098 | },
1099 | "setupReactNativeTest": {
1100 | "prefix": "sntest",
1101 | "body": [
1102 | "import 'react-native'",
1103 | "import React from 'react'",
1104 | "import renderer from 'react-test-renderer'",
1105 | "",
1106 | "import ${1:${TM_FILENAME_BASE}} from '../${1:${TM_FILENAME_BASE}}'",
1107 | "",
1108 | "describe('<${1:${TM_FILENAME_BASE}} />', () => {",
1109 | "\tconst defaultProps = {}",
1110 | "\tconst wrapper = renderer.create(<${1:${TM_FILENAME_BASE}} {...defaultProps} />)",
1111 | "",
1112 | "\ttest('render', () => {",
1113 | "\t\texpect(wrapper).toMatchSnapshot()",
1114 | "\t})",
1115 | "})",
1116 | ""
1117 | ]
1118 | },
1119 | "setupReactComponentTestWithRedux": {
1120 | "prefix": "srtest",
1121 | "body": [
1122 | "import React from 'react'",
1123 | "import renderer from 'react-test-renderer'",
1124 | "import { Provider } from 'react-redux'",
1125 | "",
1126 | "import store from 'src/store'",
1127 | "import { ${1:${TM_FILENAME_BASE}} } from '../${1:${TM_FILENAME_BASE}}'",
1128 | "",
1129 | "describe('<${1:${TM_FILENAME_BASE}} />', () => {",
1130 | "\tconst defaultProps = {}",
1131 | "\tconst wrapper = renderer.create(",
1132 | "\t\t",
1133 | "\t\t <${1:${TM_FILENAME_BASE}} {...defaultProps} />",
1134 | "\t\t,",
1135 | "\t)",
1136 | "",
1137 | "\ttest('render', () => {",
1138 | "\t\texpect(wrapper).toMatchSnapshot()",
1139 | "\t})",
1140 | "})",
1141 | ""
1142 | ],
1143 | "description": "Create test component"
1144 | },
1145 | "setupReactNativeTestWithRedux": {
1146 | "prefix": "snrtest",
1147 | "body": [
1148 | "import 'react-native'",
1149 | "import React from 'react'",
1150 | "import renderer from 'react-test-renderer'",
1151 | "import { Provider } from 'react-redux'",
1152 | "",
1153 | "import store from 'src/store'",
1154 | "import ${1:${TM_FILENAME_BASE}} from '../${1:${TM_FILENAME_BASE}}'",
1155 | "",
1156 | "describe('<${1:${TM_FILENAME_BASE}} />', () => {",
1157 | "\tconst defaultProps = {}",
1158 | "\tconst wrapper = renderer.create(",
1159 | "\t\t",
1160 | "\t\t\t<${1:${TM_FILENAME_BASE}} {...defaultProps} />",
1161 | "\t\t,",
1162 | "\t)",
1163 | "",
1164 | "\ttest('render', () => {",
1165 | "\t\texpect(wrapper).toMatchSnapshot()",
1166 | "\t})",
1167 | "})",
1168 | ""
1169 | ]
1170 | },
1171 | "graphQLForComponent": {
1172 | "prefix": "graphql",
1173 | "body": ["import { compose, graphql } from 'react-apollo'", ""]
1174 | },
1175 | "exportGraphQL": {
1176 | "prefix": "expgql",
1177 | "body": [
1178 | "export default compose(",
1179 | "\tgraphql(${1:queryOrMutation}, { name: ${2:name} }),",
1180 | ")(${1:${TM_FILENAME_BASE}})"
1181 | ]
1182 | },
1183 | "hocComponentWithRedux": {
1184 | "prefix": "hocredux",
1185 | "body": [
1186 | "import React from 'react'",
1187 | "import PropTypes from 'prop-types'",
1188 | "import { connect } from 'react-redux'",
1189 | "",
1190 | "export const mapStateToProps = state => ({",
1191 | "",
1192 | "})",
1193 | "",
1194 | "export const mapDispatchToProps = {",
1195 | " ",
1196 | "}",
1197 | "",
1198 | "export const ${1:hocComponentName} = (WrappedComponent) => {",
1199 | "\tconst hocComponent = ({ ...props }) => ",
1200 | "",
1201 | "\thocComponent.propTypes = {",
1202 | "\t}",
1203 | "",
1204 | "\treturn hocComponent",
1205 | "}",
1206 | "",
1207 | "export default WrapperComponent => connect(mapStateToProps, mapDispatchToProps)(${1:hocComponentName}(WrapperComponent))",
1208 | ""
1209 | ]
1210 | },
1211 | "hocComponent": {
1212 | "prefix": "hoc",
1213 | "body": [
1214 | "import React from 'react'",
1215 | "import PropTypes from 'prop-types'",
1216 | "",
1217 | "export default (WrappedComponent) => {",
1218 | "\tconst hocComponent = ({ ...props }) => ",
1219 | "",
1220 | "\thocComponent.propTypes = {",
1221 | "\t}",
1222 | "",
1223 | "\treturn hocComponent",
1224 | "}",
1225 | ""
1226 | ]
1227 | },
1228 | "useState": {
1229 | "prefix": "useState",
1230 | "body": [
1231 | "const [${1:state}, set${1/(.*)/${1:/capitalize}/}] = useState(${2:initialState})"
1232 | ]
1233 | },
1234 | "useEffect": {
1235 | "prefix": "useEffect",
1236 | "body": [
1237 | "useEffect(() => {",
1238 | "\treturn () => {",
1239 | "\t\t${1:effect}",
1240 | "\t};",
1241 | "}, [${2:input}])"
1242 | ]
1243 | },
1244 | "useContext": {
1245 | "prefix": "useContext",
1246 | "body": ["const ${1:context} = useContext(${2:contextValue})"]
1247 | },
1248 | "useReducer": {
1249 | "prefix": "useReducer",
1250 | "body": [
1251 | "const [state, dispatch] = useReducer(${1:reducer}, ${2:initialState}, ${3:init})"
1252 | ]
1253 | },
1254 | "useCallback": {
1255 | "prefix": "useCallback",
1256 | "body": [
1257 | "useCallback(",
1258 | "\t() => {",
1259 | "\t\t${1:callback}",
1260 | "\t},",
1261 | "\t[${2:input}],",
1262 | ")"
1263 | ]
1264 | },
1265 | "useMemo": {
1266 | "prefix": "useMemo",
1267 | "body": ["useMemo(() => ${1:function}, ${2:input})"]
1268 | },
1269 | "useRef": {
1270 | "prefix": "useRef",
1271 | "body": ["const ${1:ref} = useRef(${2:initialValue})"]
1272 | },
1273 | "useImperativeHandle": {
1274 | "prefix": "useImperativeHandle",
1275 | "body": [
1276 | "useImperativeHandle(",
1277 | "\t${1:ref},",
1278 | "\t() => {",
1279 | "\t\t${2:handler}",
1280 | "\t},",
1281 | "\t[${3:input}],",
1282 | ")"
1283 | ]
1284 | },
1285 | "useDebugValue": {
1286 | "prefix": "useDebugValue",
1287 | "body": ["useDebugValue(${1:value})"]
1288 | },
1289 | "useLayoutEffect": {
1290 | "prefix": "useLayoutEffect",
1291 | "body": [
1292 | "useLayoutEffect(() => {",
1293 | "\treturn () => {",
1294 | "\t\t${1:effect}",
1295 | "\t},",
1296 | "\t[${2:input}]",
1297 | "})"
1298 | ]
1299 | }
1300 | }
1301 |
--------------------------------------------------------------------------------