Skip to content

Instantly share code, notes, and snippets.

@alexeyraspopov
Created May 20, 2019 21:30
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save alexeyraspopov/205eecdc57b0f8e0d2f462609b25ba0d to your computer and use it in GitHub Desktop.
Save alexeyraspopov/205eecdc57b0f8e0d2f462609b25ba0d to your computer and use it in GitHub Desktop.

Given a function component

export default function MyComponent({ value }) {
  return (
    <div>
      <p>{value}</p>
    </div>
  );
}

Let's introduce a state with recompose

-export default function MyComponent({ value }) {
+function MyComponent({ counter, setCounter, flag, setFlag }) {
  return (
    <div>
-      <p>{value}</p>
+      <p>{counter}</p>
+      <button onClick={() => setCounter(counter + 1)}>increment</button>
+      <button onClick={() => setFlag(!flag)}>toggle</button>
    </div>
  );
}
+
+const enhancer = compose(
+  withState("counter", "setCounter", props => props.value),
+  withState("flag", "setFlag", () => false)
+);
+export default enhancer(MyComponent);

And compare to the same thing with hooks

export default function MyComponent({ value }) {
+  let [counter, setCounter] = useState(value);
+  let [flag, setFlag] = useState(false);
  return (
    <div>
-      <p>{value}</p>
+      <p>{counter}</p>
+      <button onClick={() => setCounter(counter + 1)}>increment</button>
+      <button onClick={() => setFlag(!flag)}>toggle</button>
    </div>
  );
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment