提问者:小点点

如何使用React路由器将数据从一个兄弟传递到另一个兄弟?


我有一个带有submit按钮的搜索栏,该按钮从API中获取数据,所有这些都位于固定的导航栏中。 每次单击submit,我都希望React Router更改为一个结果页面,并显示结果。

我似乎不知道如何将数据作为道具或状态传递给这个新组件。 下面是我的搜索API代码:

const Search = () => {
  const apiKey = 'xxxxxx';
  const [input, setInput] = useState('');
  const [items, setItems] = useState([]);

  const handleSubmit = (e) => {
    searchAPI();
  };

  const searchAPI = async () => {
    const res = await fetch(`http://www.omdbapi.com/?apikey=${apiKey}&s=${input}`);
    const data = await res.json();
    setItems(data.Search);
  };

  return (
    <form>
      <input onChange={(e) => setInput(e.target.value)}></input>
      <Link to={{ pathname: '/results', state: items }}>
        <button type="submit" onClick={handleSubmit}>
          search
        </button>
      </Link>
    </form>
  );
};

下面是我的results组件中的代码:

const SearchResults = () => {
  const [results, setResults] = useState([]);
  return (
    <div>
      <h1>RESULTS</h1>
      {results.map((result) => {
        return <li key={results.Search.imdbID}>{result.Search.Title}</li>;
      })}
    </div>
  );
};

如何将数据从搜索API组件中的items获取到结果组件中的results


共2个答案

匿名用户

使用:

<Link to="results" myData={{ state: items }}>

在结果组件中,您可以访问参数:

import {useRouteMatch} from 'react-router-dom'
const {params} = useRouteMatch();

console.log(params.myData);

匿名用户

你就这么近了。 您可以在SearchResults组件中使用“react-router-dom”中的useLocation钩子,如下所示

const { state } = useLocation();

您从链接传递的项目将会在那里。