【问题标题】:How to use dynamic routing to pass information / react如何使用动态路由传递信息/反应
【发布时间】:2019-10-21 10:01:29
【问题描述】:

ButtonList 返回过滤后的Buttons 列表,每个链接到一个新页面。我想通过添加动态路由来做到这一点,但我不知道如何编写代码......我如何正确使用history.push?任何帮助将不胜感激。

export default function Home() {
  const [searchValue, setSearchValue] = useState("");
  const history = useHistory();

  const filteredData = data.filter(item =>
    item.name.toLowerCase().includes(searchValue.toLowerCase())
  );

  function handleSearch(value) {
    setSearchValue(value);
  }

  const selectedItem = filteredData.find(item => item.name);

  function handleSelect(item) {
    history.push(`/home/${item.name}`);
  }

  return (
    <WrapperDiv>
      <StyledHeader />
      <Switch>
              
        <Route exact path="/home">
                
          <Searchbar onSearch={handleSearch} />
          <ButtonList data={filteredData} onClick={handleSelect} /> 
        </Route>
        <Route exact path="/home/{...}">
          <StyledDiv>
            <Button item={selectedItem} light />
            <AccordionList />
          </StyledDiv>
        </Route>
      </Switch>
    </WrapperDiv>
  );
}
export default function Button({ children, handleSelect }) {
  return (
    <button
      to={{
        pathname: "/home/" + data.name,
        data: data
      }}
      onClick={handleSelect}
    >
      {children}
    </button>
  );
}
export const data = [
  {
    name: "Apple",
    id: 1 
  },
  {
    name: "Banana",
    id: 2 
  },
  {
    name: "Blueberry",
    id: 3 
  }
];

【问题讨论】:

    标签: javascript reactjs dynamic-routing


    【解决方案1】:

    实现它的一个好方法是使用React Router,这使得创建动态路由变得非常容易。

    在这里编写整个代码有点困难,因此请使用您的代码I found a good example of an easy way to implement react-router

    示例

    import { useHistory } from "react-router-dom";
    
    function MyButton() {
      let history = useHistory();
    
      function triggerClick() {
        history.push("/somewhere");
      }
    
      return (
        <button type="button" onClick={triggerClick}>
          Go somewhere
        </button>
      );
    }
    

    【讨论】:

    • 谢谢,这就是我想做的,但我无法让它适用于我的场景。我想将 item.name 发布到 url(而不是 index+1 此处:/user/${index + 1}}>) - 我该怎么做?
    • 据我所知,您的代码很好。如果您从 react-router 导入 useHistory();,那么它应该可以工作。您能否提供更多有关您遇到的问题的信息?
    猜你喜欢
    • 2023-04-11
    • 1970-01-01
    • 2016-02-17
    • 2023-03-30
    • 1970-01-01
    • 2020-04-15
    • 2018-12-14
    • 2020-07-07
    • 2021-12-25
    相关资源
    最近更新 更多