发布于 2025-12-08 0 阅读
0

React:“我真希望我能用这种方式编写组件。” DevTwitter Chrome 扩展程序 🍻 🍻 🍻

React:“我真希望这就是我编写组件的方式。”

DevTwitter Chrome 扩展程序

🍻

🍻

🍻

已接受的挑战!

useMatchFetch下面的代码。

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>
  });
};
Enter fullscreen mode Exit fullscreen mode

观看我的直播

想看看我的创作过程吗?快来 Twitch 上观看吧!

Twitch 截图

useMatchFetch

我真的很喜欢这个。我想我可能会在一些地方用到它。

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);
};
Enter fullscreen mode Exit fullscreen mode

结尾

在 Twitter 上关注我@joelnet

干杯!

文章来源:https://dev.to/joelnet/react-i-really-wish-this-is-how-i-could-write-components-1k4j