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

时间:2020-07-08 14:40:36

标签: javascript reactjs react-router

我有一个带有提交按钮的搜索栏,该按钮从API提取数据,所有按钮都位于固定的导航栏中。每次单击提交时,我都希望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>
  );
};

这是我的结果组件中的代码:

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 个答案:

答案 0 :(得分:1)

使用:

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

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

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

console.log(params.myData);

答案 1 :(得分:1)

您是如此亲密。您可以像这样在SearchResults组件中使用来自“ react-router-dom”的useLocation钩子

const { state } = useLocation();

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