如何在reactjs新的钩子api中进行api调用并在组件之间共享?

时间:2018-10-27 11:40:28

标签: javascript reactjs react-hooks

如何在新的reactjs钩子api中调用restApi。 并使用useEffects和useState重用数据? 我只想跨组件重复使用数据。

import { useState, useEffect } from "react";
export default function getAdvice(url) {
    fetch(`http://api.adviceslip.com/advice`)
        .then(res => res.json())
        .then(res => console.log(res))
        .catch(err => console.log(err)
}

1 个答案:

答案 0 :(得分:5)

您可以创建一个自定义挂钩,以创建您在网络请求完成后设置的新状态advice

从提供给useEffect的函数中返回一个函数,当使用该函数的组件重新呈现或卸载该组件时,该请求将取消。您还可以将url放在数组中作为useEffect的第二个参数,以仅在url实际更改时重新运行网络请求。

示例

const { useState, useEffect } = React;

function useAdvice(url) {
  const [advice, setAdvice] = useState(null);

  useEffect(
    () => {
      const timeout = setTimeout(() => {
        setAdvice(`Use ${url} to get some nice advice`);
      }, 1000);
      
      return () => clearTimeout(timeout);
    },
    [url]
  );

  return advice;
}

function App() {
  const advice = useAdvice("https://google.com");

  return <div>{advice}</div>;
}

ReactDOM.render(<App />, document.getElementById("root"));
<script src="https://unpkg.com/react@16.7.0-alpha.0/umd/react.production.min.js"></script>
<script src="https://unpkg.com/react-dom@16.7.0-alpha.0/umd/react-dom.production.min.js"></script>
<div id="root"></div>