无法获取 API URL 以重新路由到正确的地址:React Hooks

Posted

技术标签:

【中文标题】无法获取 API URL 以重新路由到正确的地址:React Hooks【英文标题】:Can't get API URL to reroute to right address: React Hooks 【发布时间】:2021-01-25 00:33:34 【问题描述】:

我正在尝试构建一个项目来重新制作jobs.github.com 页面。我已经完成了主页和个人工作页面,但是当我输入搜索参数时,我不能做的是 git 应用程序重新路由到正确的路径。

这是我的 useHomeFetch 页面:

import React,  useEffect, useState  from 'react';

export const useHomeFetch = () => 
    const [state, setState] = useState( jobs: [] );
    const [loading, setLoading] = useState(false);
    const BASE_URL = 'https://cors-anywhere.herokuapp.com/https://jobs.github.com/positions';

    const fetchJobs = async url => 
        setLoading(true);

        let loadMore = url.search('page');

        try 
            let result = await (await fetch(url)).json();
            setState(prev => (
                ...prev, 
                jobs: loadMore !== -1
                    ? [...prev.jobs, ...result]
                    : [...result]
            ))
         catch(error) 
            console.log(error)
        

        setLoading(false)
    

    useEffect(() => 
        fetchJobs(`$BASE_URL.json`)
    , [])

    return [ state, loading, BASE_URL , fetchJobs];

这里是搜索栏:

const SearchBar = () => 
    const [ BASE_URL , fetchJobs] = useHomeFetch();;

    const runThis = (e) => 
        e.preventDefault()
       let search = descriptionEl.current.value.trim() !== ''
            ?   `description=$descriptionEl.current.value`.replace(/ /g, '+')
            :   '';

        let location = locationEl.current.value.trim() !== ''
            ?  `location=$locationEl.current.value`.replace(/ /g, '+')
            :   '';

        let full = fullTime ? `full_time=true` : ''

        fetchJobs(`$BASE_URL.json?$search$location$full`)        
    

    return (
        <form className="search__bar" onClick=runThis> ...

每当我输入搜索参数时,它都会返回到原始页面。我相信这是因为useHomeFetch页面中的useEffect。我如何才能运行相同的函数,但只使用基于参数的正确 URL?

谢谢!

【问题讨论】:

onClick 处理程序附加到表单是否正确?它不应该等待一些输入然后调用onSubmit 处理程序吗? 【参考方案1】:

看起来好像您没有计算有效的 URL 查询字符串。您将它们连接起来以生成一个类似https://cors-anywhere.herokuapp.com/https://jobs.github.com/positions?description=kdskj+dslkjlocation=lksd+kljdsfkljfull_time=true 的 URL,其中它们没有用 & 符号 (&amp;) 分隔。

我相信您的预期查询字符串应该是https://cors-anywhere.herokuapp.com/https://jobs.github.com/positions?description=kdskj+dslkj&amp;location=lksd+kljdsfklj&amp;full_time=true

通过将所有查询参数转储到一个数组中进行更新,并将它们与&amp; 连接起来。

const runThis = (e) => 
    e.preventDefault()
   let search = descriptionEl.current.value.trim() !== ''
        ?   `description=$descriptionEl.current.value`.replace(/ /g, '+')
        :   '';

    let location = locationEl.current.value.trim() !== ''
        ?  `location=$locationEl.current.value`.replace(/ /g, '+')
        :   '';

    let full = fullTime ? `full_time=true` : ''

    fetchJobs(`$BASE_URL.json?$[search, location, full].join('&'`)        

【讨论】:

我一直在想如何将他们与 & 一起加入。非常感谢您! @Diarrah 酷。如果这解决了您的问题,那么请接受答案,如果您觉得有帮助,请点赞。干杯

以上是关于无法获取 API URL 以重新路由到正确的地址:React Hooks的主要内容,如果未能解决你的问题,请参考以下文章

wifi获取不到ip地址怎么办 获取不到ip地址解决办法

电脑打开网页出现URL无法获取怎么解决啊

无法以正确的顺序显示上传到 firebase 商店的图片

无法从角度路由器获取路径或 url

React js路由器在部署时无法通过url正确路由到页面

无法从角度路由器获取路径或URL