Skip to content

Saviio/ts-react-pure-class-plugin

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

46 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ts-react-pure-class-plugin

A TypeScript AST Transformer that transform class based stateless pure component to functional component.

Example

from

export default class extends React.PureComponent<{}> {

  render() {
    return <div />
  }

}

to

import { memo as react_memo_1 } from "react";

function rewrited_pure_class_1(rewrited_props_2) {
    return React.createElement("div", null);
}

export default react_memo_1(rewrited_pure_class_1);

How to use

getCustomTransformers: () => ({
  before: [pureClsPlugin()],
})

Notice

if you want to use this plugin, please make sure there're no components were described like following code, otherwise, the transformation will break your app.

class Foo extends React.PureComponent {

  render() {
    return <div />
  }

}

class Bar extends Foo {
  // bala bala
}

In most situations, you can just mark Foo as abstract class to skip the optmization and solve the problem.

Option

pureClsPlugin(option?: Option)

interface Option {
  verbose?: boolean
  useMemo?: boolean
}

Deopt

if transformer meets one of following conditions, optmization will be skipped.

  • contain react component lifecycle
  • contain state
  • contain getter/setter
  • contain decorator
  • contain static property
  • abstract class
  • not a pure component
  • a special comment directive
  • non-top-level class

Deopt directive

/*@__DEOPT__*/
export class A1 extends React.PureComponent {
  render() {
    return <div>Foo</div>
  }
}

License

Apache-2.0

About

A TypeScript AST Transformer that transform class based pure component to functional component

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •  
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy