I am trying to pass the petData via context to the SearchPage component. The petData is returning undefined. Any help in what I am doing wrong.
Thanks
Context.js
import { createContext } from "react";
const PetDataContext = createContext();
export default PetDataContext;
App.js
On the app.js I am fetching data and putting it into a state accessible outside the scope of the axios request. I am then trying to pass it via the useContext hook.
import PetDataContext from "./Context/context";
function App() {
const [petData, setPetData] = useState();
useEffect(() => {
axios
.get(`${BACK_PORT}/data`)
.then(function (response) {
setPetData(response.data);
})
}, []);
console.log(petData);
return (
<div className="App">
<PetDataContext.Provider value={{ petData }}>
<BrowserRouter>
<NavBar />
<Switch>
<Route path="/" component={MainSignedOut} exact />
<Route path="/mainsignedin" component={MainSignedIn} />
<Route path="/searchpage" component={SearchPage} />
<Route path="/mypets" component={MyPets} />
<Route path="/admin" component={Admin} />
<Route exact path="/pets/:id" component={PetPage} />
<Route component={err404} />
</Switch>
</BrowserRouter>
</PetDataContext.Provider>
</div>
);
}
export default App;
SearchPage.jsx
On the SearchPage component I am trying to pass the petsData via useContext, however it is returning undefined.
import PetDataContext from "../../Context/context";
function SearchPage() {
const { petData } = useContext(PetDataContext);
console.log("testing123", petData); //returns undefined
const [filter, setFilter] = React.useState("");
const filteredData = React.useMemo(() => {
if (filter == "") return petData;
return petData.filter(
(item) =>
item.name.toLowerCase().includes(filter) ||
item.breed.toLowerCase().includes(filter)
);
}, [petData, filter]);
return (
<>
<SearchBar onSearch={(searchTerm) => setFilter(searchTerm)} />
<div className="d-flex flex-wrap sp-body">
<DogCardsDisplayed petData={filteredData} />
</div>
</>
);
}
export default SearchPage;