26

React: "I really wish this is how I could write components."

 4 years ago
source link: https://www.tuicool.com/articles/BvIN7bJ
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
YjINbab.jpg!web
ARvY3aj.jpg!web

Mike Piccolo

@mfpiccolo

mmmMvyy.png!web

I really wish this is how I could write components.

04:08 AM - 05 Jun 2019

vmMNNbr.png!web 11 maa6Vna.png!web 105

Challenge Accepted!

code for useMatchFetch down below.

import React from "react";
import { useMatchFetch } from "./effects/useMatchFetch";

export const Example = () => {
  const render = useMatchFetch("https://swapi.co/api/people/1/?format=json");

  return render({
    pending: () => <div>Loading</div>,
    error: err => <div>{err.toString()}</div>,
    data: data => <pre>{JSON.stringify(data, null, 2)}</pre>
  });
};

Watch my Live Stream

Want to see my process on how I created this? Watch me on Twitch!

vuuyymZ.jpg!web

useMatchFetch

I actually really like this. I think I might end up using this in a few places.

import { useState, useEffect } from "react";

const render = data => match =>
  data.pending ? match.pending()
  : data.error ? match.error(data.error)
  : data.data  ? match.data(data.data)
  : null // prettier-ignore

export const useMatchFetch = url => {
  const [data, setData] = useState({ pending: true });

  useEffect(() => {
    fetch(url)
      .then(response => response.json())
      .then(data => setData({ data, pending: false }))
      .catch(error => setData({ error, pending: false }));
  }, [url]);

  return render(data);
};

End

Follow me on Twitter @joelnet

FFvaEzi.jpg!web


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK