【问题标题】:How to send request using customized Hooks in React Hooks如何在 React Hooks 中使用自定义 Hooks 发送请求
【发布时间】:2020-04-25 16:08:01
【问题描述】:

我试图创建一个自定义 Hooks 来处理来自任何组件的输入 HTTP 请求,只需调用 useHttpPOSTHandler 并希望将 .then 与 Axios 一起使用,但它会失败并且错误是 因为我是新来的反应无法调试这个 我尝试过的

import { useEffect, useState } from "react";
import axios from "axios";

const useHttpPOSTHandler = ({url , data}) => {
    const [httpData, setHttpData] = useState();

    const apiMethod = useCallback( ({url , data}) => {
        axios
          .post(url , data)
          .then((response) => {
            console.log(response)
            console.log(response.data)
            setHttpData(response.data);
          })
          .catch((error) => {
            console.log(error);
          });
    }, [setHttpData])

    return [ httpData , apiMethod];
};

export default useHttpPOSTHandler;

【问题讨论】:

    标签: reactjs axios react-hooks


    【解决方案1】:

    useHTTPPostHandler 的参数应该是一个带有键 url 和 data 的对象,而不是你单独传递它们导致语法错误,将它们包装在 {}

    const getData = useHttpPOSTHandler(
         { url: 'url', data: { "password": userPassword, "username": userName }
    });
    

    编辑:根据您的更新,一旦您进行 API 调用,您就不会看到更新的数据。它将反映在下一次渲染中

    import useHttpPOSTHandler from "...."
    const MyFunc = () => {
        const [httpData, apiMethod] = useHttpPOSTHandlerdotthen()
    
        const handleSubmit = () => {
            apiMethod({url: 'url' , data: { "password": userPassword, "username": userName }})
        }
    
       if(httpData){
           console.log("entered in api method")
           console.log(httpData)
       }
    
       return (
          <div>
             ...
          </div>
       )
    }
    

    【讨论】:

    • 嗨@Shubham Khatri 我只是更新问题是逻辑对吗?我不想使用 useEfect
    • 更新了答案,除非数据在下次渲染时可用,否则您的逻辑几乎是正确的
    • 嗨@Shubham Khatri 你能告诉我如何在reactjs中从一个页面路由到另一个页面,因为我是它的初学者stackoverflow.com/questions/61431471/…
    猜你喜欢
    • 2019-04-03
    • 1970-01-01
    • 2019-09-02
    • 2020-09-11
    • 2021-12-27
    • 1970-01-01
    • 2021-06-13
    • 2019-10-30
    • 2020-02-10
    相关资源
    最近更新 更多