简体   繁体   中英

react link route not redirecting to url

I have this serch.js file. When I search and click on the li in the search result, I want to get redirected to <InnerDetail /> but the URL doesn't change or I don't get redirected to this page

but manualy if I type in the URL localhost/detiled/8 I am redirected to to <InnerDetail /> with id as 8

import React from "react";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import { faSearch } from "@fortawesome/free-solid-svg-icons";
import { useState, useEffect } from "react";
import axios from "axios";
import { Link } from "react-router-dom";
import { useHistory } from "react-router-dom";
const initialState = {
  idaddProducts: "",
};
const Searchclients = () => {
  const history = useHistory();
  const [showResults, setShowResults] = React.useState(true);

  const [poName, pnName] = React.useState(initialState);
  const [showSerch, setShowSerch] = React.useState([]);
  const [detail, setDetail] = useState(false);
  const [inputValue, setInputValue] = React.useState("");
  const [filteredSuggestions, setFilteredSuggestions] = React.useState([]);
  const [selectedSuggestion, setSelectedSuggestion] = React.useState(0);
  const [displaySuggestions, setDisplaySuggestions] = React.useState(false);
 
 

  const suggestions = [];
  showSerch.forEach(function (data) {
    suggestions.push(data);
  });
 

  const onChange = (event) => {
    const value = event.target.value;
    setInputValue(value);
    setShowResults(false);



    const filteredSuggestions = suggestions.filter(
      (suggestion) =>
        suggestion.firstname
          .toString()
          .toLowerCase()
          .includes(value.toLowerCase()) ||
        suggestion.id.toString().toLowerCase().includes(value.toLowerCase())
    );

   

    setFilteredSuggestions(filteredSuggestions);
    setDisplaySuggestions(true);
  };

  const onSelectSuggestion = (index) => {
    setSelectedSuggestion(index);
    setInputValue(filteredSuggestions[index]);
    setFilteredSuggestions([]);
    setDisplaySuggestions(false);
  };

  const SuggestionsList = (props) => {
    // console.log(props);

    const {
      suggestions,
      inputValue,

      onSelectSuggestion,
      displaySuggestions,
      selectedSuggestion,
    } = props;

    if (inputValue && displaySuggestions) {
      if (suggestions.length > 0) {
        return (
          <ul className="suggestions-list" style={styles.ulstyle}>
            {suggestions.map((suggestion, index) => {
              // console.log(suggestions);
              const isSelected = selectedSuggestion === index;
              const classname = `suggestion ${isSelected ? "selected" : ""}`;
              return (
                <Link to={`/detiled/${suggestion.id}`}>     //this link dont work
                  <li
                    style={styles.listyle}
                    // onMouseOver={{ background: "yellow" }}
                    key={index}
                    className={classname}
                   
                  >
                    {suggestion.firstname}
                  </li>
                </Link>
              );
            })}
          </ul>
        );
      } else {
        return <div>No suggestions available...</div>;
      }
    }
    return <></>;
  };



  useEffect(() => {
    axios
      .get("all-doctors-list/")
      .then((res) => {
        const data = res.data;
        // pnName(data.data);

        //  var stringdata = data;
        setShowSerch(data);

        //console.log(stringdata);
      });
    //  setShowSerch(data);
  }, []);

  return (
    <>
      <div className="note-container" style={styles.card}>
        <div style={styles.inner}>
          <p style={{ textAlign: "left" }}>Search Doctors</p>
          <form className="search-form" style={{}}>
            {showResults ? (
              <FontAwesomeIcon
                style={{ marginRight: "-23px" }}
                icon={faSearch}
              />
            ) : null}
            <input
              onChange={onChange}
              value={inputValue}
              style={styles.input}
              type="Search"
            />

            <SuggestionsList
            
              inputValue={inputValue}
              selectedSuggestion={selectedSuggestion}
              onSelectSuggestion={onSelectSuggestion}
              displaySuggestions={displaySuggestions}
              suggestions={filteredSuggestions}
            />
          </form>
        </div>
      </div>
    </>
  );
};



export default Searchclients;

Navigator.js

import React from "react";
import { BrowserRouter as Router, Route, Switch } from "react-router-dom";
import InnerDetail from "./client/doctor/components/innerto_detail.js";
class Navigator extends React.Component {
  render() {
    return (
      <Router>
        <div>
          <Switch>
            <Route exact path="/">
              <Home />
            </Route>

          <Route path="/detiled/:id">
              <InnerDetail />
          </Route>
</Switch>
        </div>
      </Router>
    );
  }
}

function Home() {
  return (
    <div style={{ paddingTop: "20%", textAlign: "center" }}>
      <h1>Home</h1>
    </div>
  );
}



export default Navigator;


when i hover on the <li> the bottom of the browser the path is showing currectly在此处输入图片说明

i think the problem is here i tried another links here nothing is working here

 <Link to={`/detiled/${suggestion.id}`}>     //this link dont work
                  <li
                    style={styles.listyle}
                    // onMouseOver={{ background: "yellow" }}
                    key={index}
                    className={classname}
                   
                  >
                    {suggestion.firstname}
                  </li>
                </Link>

i tryed another link under the flowing code a button called hello and that works i think the probelm is with the return

  <SuggestionsList
              inputValue={inputValue}
              selectedSuggestion={selectedSuggestion}
              onSelectSuggestion={onSelectSuggestion}
              displaySuggestions={displaySuggestions}
              suggestions={filteredSuggestions}
            />
          <Link
            to={{
              pathname: `/detiled/5`,
            }}
          >
            <button>hello</button>
          </Link>

try using

<Route path="/detiled/:id" component={InnerDetail} />

instead of

<Route path="/detiled/:id">
<InnerDetail />`

in Navigator.js

and

Route exact path="/">
<Home />

did you created any Home component, and not imported that in Navigator.js

<Link to={"/detiled/"+ suggestion.id}><li>...</li></Link>

这对我有用

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM