All Projects → hswolff → with-lifecycles

hswolff / with-lifecycles

Licence: other
An easy way to turn stateless functional components into class components with state and lifecycles.

Programming Languages

javascript
184084 projects - #8 most used programming language

Projects that are alternatives of or similar to with-lifecycles

omi-docs
📃omil文档
Stars: ✭ 64 (+204.76%)
Mutual labels:  sfc
vue-horizontal-timeline-component
vue横向时间轴,可支持拖拽、滚动的
Stars: ✭ 32 (+52.38%)
Mutual labels:  sfc
unplugin-vue
✨ Transform Vue 3 SFC to JavaScript. Supports Vite, esbuild, Rollup and Webpack.
Stars: ✭ 38 (+80.95%)
Mutual labels:  sfc
sdn-nfv-papers
This is a paper list about Resource Allocation in Network Functions Virtualization (NFV) and Software-Defined Networking (SDN).
Stars: ✭ 40 (+90.48%)
Mutual labels:  sfc
vue-code-view
A Vue 2 component like Vue SFC REPL `@vue/repl` : u can edit, run and preview the code effect display in real time on the web page.
Stars: ✭ 67 (+219.05%)
Mutual labels:  sfc
SFC-foundations
SFC bringing change to the society. Drop a ⭐
Stars: ✭ 111 (+428.57%)
Mutual labels:  sfc
Jetpack Compose News
基于Jetpack Compose实现的一款集新闻、视频、美图、音乐、天气等功能的资讯App,持续完善中...
Stars: ✭ 58 (+176.19%)
Mutual labels:  lifecycles
vue-template-babel-compiler
Enable Optional Chaining(?.), Nullish Coalescing(??) and many new ES syntax for Vue.js SFC based on Babel
Stars: ✭ 106 (+404.76%)
Mutual labels:  sfc
esbuild-vue
An esbuild plugin for loading and compiling Vue 2 single-file components.
Stars: ✭ 43 (+104.76%)
Mutual labels:  sfc
vue-sfc-cli
🔨A powerful tool for developing vue single-file component
Stars: ✭ 137 (+552.38%)
Mutual labels:  sfc
sfc app
Service Function Chaining Application for Ryu SDN controller
Stars: ✭ 25 (+19.05%)
Mutual labels:  sfc

with-lifecycles

Travis npm package Coveralls

Everyone loves React's stateless functional components (SFC). The ease and simplicity of writing just a function for a React component is so delicious that you wish you could write your entire app with only functions!

Inevitably, you'll run across a need to use state in your component. Or even scarier, having to use some of the lifecycle methods of a React Class Component.

Then you're met with a horrible quandry: do you keep the beautiful simplicity of your SFC (🤗) or do you rewrite it to be a React Class Component (😢).

And everyone hates that most horrible of all chores of converting a SFC to a Class component.

...well fear not...

For this is the library for you! It'll let you have your 🎂 and 👄 it too!

Example

We have a simple Counter component that can increment a counter.

const Counter = ({ count, incrementCount }) => (
  <div>
    <div>Current count: {count}</div>
    <button onClick={incrementCount}>Increment</button>
  </div>
);

This is a nice and simple SFC. However, it doesn't do anything without any state. So let's add that.

const CounterWithLifecycles = withLifecycles({
  getInitialState: () => ({ count: 0 }),
  mapStateToProps: state => ({ count: state.count }),
  incrementCount: ({ props, state, setState }) =>
    setState({ count: state.count + 1 }),
})(Counter);

Voila! 🎉 Your SFC now has all the super powers of a React Class component.

Play with a live example on Codesandbox.

Edit withLifecycles

Documentation

withLifecycles is a Higher-Order Component which takes in an object which supports every known React Class method, including any additional methods you want to be included in the returned class (such as event handlers), and returns a function which takes in the component you want to wrap.

There's two additional special properties:

getInitialState(props): This is similar to the old React.createClass method and is a way for you to set the initial state of the wrapped component. It is called with props.

mapStateToProps(state, props): Similar to react-redux's mapStateToProps, it's called with state and props.

non-React method: Any non-React method is called with an object that looks like:

{
    event: event, // Event Handler Event if it exists.
    state: this.state, // State
    props: this.props, // Props
    setState: this.setState, // A copy of setState for updating.
}
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].