R

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

2025-05-25

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
PREV
为什么异步代码如此令人困惑(以及如何使其变得简单)强制同步的肮脏技巧 问题不在于异步代码 从一开始就异步编写 如果没有区别会怎样?异步函数组合 ESNext 提案:管道运算符 MojiScript MojiScript 异步示例 我需要你的帮助!总结
NEXT
函数式 JavaScript - 函子、单子和承诺 为什么没人能解释单子? 我们准备好理解函子了吗? 范畴、对象和映射(态射) 回到函子 回到单子 承诺 总结