【问题标题】:reactjs - axios - request how to improvereactjs - axios - 请求如何改进
【发布时间】:2021-01-20 22:07:46
【问题描述】:

我有这个请求处于反应状态。然后两者都做了几乎相同的目的。我正在考虑分页,但这个问题却让我感到困惑。关于分别加载两个请求

  // use effect loading hooks api responses
  useEffect(() => {
    const loadNews = async () => {
        try {
            const response = await api.get('science.json');

            const { results } = response.data;
           console.log(results);
           setScience(results);
          } catch (err) {
            // Handle Error Here
            console.error(err);
         }
         };

        loadNews();
     }, []);

  useEffect(() => {
    const loadNews = async () => {
        try {
            const response = await api.get('arts.json');

            const { results } = response.data;
           console.log(results);
           setTechnologies(results);
          } catch (err) {
            // Handle Error Here
            console.error(err);
         }
         };

        loadNews();
     }, []);

两者都是出于相同的目的,是否有任何解决方案不让此代码相同两次?

【问题讨论】:

    标签: reactjs react-native axios react-hooks use-state


    【解决方案1】:

    这可能是

    useEffect(() => {
      loadNews("arts.json", setScience);
      loadNews("science.json", setTechnologies);
    }, []);
    
    const loadNews = async (url, callBack) => {
      try {
        const response = await api.get(url);
        const { results } = response.data;
        console.log(results);
        callBack(results);
      } catch (err) {
        // Handle Error Here
        console.error(err);
      }
    }
    

    【讨论】:

    • 几乎一样。谢谢你paveloosha!
    • @Lago,不客气。我猜我在写作的同时:)
    【解决方案2】:

    我倾向于将获取过程(获取结果)放入它自己的异步函数中。然后,您可以使用该函数在 useEffect 中设置结果。

    类似这样的:

    async function fetchNews(jsonFile) {
        const response = await api.get(jsonFile);
        const { results } = response.data;
        return results;
    }
    
    useEffect(() => {
       fetchNews("science.json")
         .then(res => setScience(res))
         .catch(err => console.error(err))
    
       fetchNews("arts.json")
         .then(res => setTechnologies(res))
         .catch(err => console.error(err))
    }, []);
    

    【讨论】:

    • 感谢您的方法。我应该继续创建一个新文件来处理这个问题,并且只在地图中渲染数据吗?
    • 我的意思是,获取应该转到新文件吗?
    • 我猜你可以做这两种方式,将这些函数作为“模块”提取到单独的文件中,或者将它们放在同一个文件中,但最好在你的组件之外。我认为取决于项目和您的偏好。
    猜你喜欢
    • 2019-05-20
    • 2016-11-26
    • 1970-01-01
    • 2020-07-17
    • 1970-01-01
    • 2020-09-25
    • 2018-04-25
    • 1970-01-01
    • 2017-08-11
    相关资源
    最近更新 更多