• [React] Use Async Functions in a Recoil Selector


    Instead of just returning a value from a recoil selector, you can return any promise, which means that you can do asynchronous functions in recoil selectors (this is a little like a redux thunk).

    The huge bonus is that you don't have to do anything different when actually calling the selector - use can use useRecoilValue in the same way that you would from a normal selector.

    The only thing you must do is somewhere in the component tree, wrap any component that uses an async selector with a <React.Suspense> tag with a fallback prop that will tell React what to display when the async selector isn't loaded yet.

     Component:
    import React from "react";
    
    import { useRecoilValue } from "recoil";
    
    import { highScores } from "./selectors";
    
    const HighScore = () => {
      const score = useRecoilValue(highScores);
    
      return <div>High Score: {score}</div>;
    };
    
    export default HighScore;

    Selectors.js:

    import { selector } from "recoil";
    
    import { gameScore } from "./atoms";
    
    const fetchHighScores = async () => {
      return new Promise((resolve, reject) => {
        setTimeout(() => {
          resolve(303);
        }, 1000);
      });
    };
    
    const highScores = selector({
      key: "highScores",
      get: async ({ get }) => {
        return await fetchHighScores();
      }
    });
    
    export { highScores };

    Use:

    import React from "react";
    import "./styles.css";
    
    import { RecoilRoot } from "recoil";
    import HighScore from "./HighScore";
    
    function App() {
      return (
        <RecoilRoot>
          <div className="App">
            <React.Suspense fallback={<div>Loading...</div>}>
              <HighScore />
            </React.Suspense>
          </div>
        </RecoilRoot>
      );
    }
    
    export default App;
  • 相关阅读:
    如何在ASP.NET中使用div弹出窗口
    How to avoid error "LNK2001 unresolved external" by using DEFINE_GUID
    一个JavaScript实现的幻灯片程序分析
    Systems Thinking in Project Management
    CSS
    How To Clear Floats Without Structural Markup
    Public Symbols and Private Symbols
    DOM and CSS positioning
    JavaScript对象模型执行模型
    JavaScript 操作图片
  • 原文地址:https://www.cnblogs.com/Answer1215/p/13154520.html
Copyright © 2020-2023  润新知