'Created Cards i want to click on the card to get list of all blogs created by user?
I'm using react and active record associations[users,blogs] for backend. I basically have a nested data structure. I rendered a list of cards on my page and I want the user to be able to click on the card so that it gives them all the blogs they create and also allows them to add a new blog.
I'm confused how this nested data structure will work. I tried creating two use effects.
import './App.css';
import Home from './components/Home';
import Users from './components/Users';
import NewUserForm from './components/NewUserForm';
import Navbar from './components/Navbar';
import Search from './components/Search';
import { useState, useEffect } from 'react';
import { Route, Switch } from 'react-router-dom';
import styled from 'styled-components';
import Reviews from './components/Reviews';
import AddReviewForm from './components/AddReviewForm';
function App() {
const [users, setUsers] = useState([]);
const [reviews, setReviews] = useState([]);
const [searchTerm, setSearchTerm] = useState('');
useEffect(() => {
document.title = 'Shades of Fashion';
}, []);
useEffect(() => {
fetch('http://localhost:9292/users')
.then((res) => res.json())
.then((userData) => {
setUsers(userData);
});
}, []);
const displayedUsers = users.filter((user) => {
return user.name.toLowerCase().includes(searchTerm.toLocaleLowerCase());
});
function handleAddUsers(newUser) {
setUsers([...users, newUser]);
}
useEffect(() => {
fetch('http://localhost:9292/reviews')
.then((res) => res.json())
.then((reviewData) => {
setReviews(reviewData);
});
}, []);
const displayedReviews = reviews.filter((review) => {
return review.name;
});
function handleAddReviews(newReview) {
setReviews([...reviews, newReview]);
}
return (
<AppContainer>
<Navbar />
<Switch>
<Route path='/reviews'>
<Reviews reviews={displayedReviews} />
</Route>
<Route path='/addReview'>
<AddReviewForm onAddReview={displayedReviews} />
</Route>
<Route path='/users'>
<Search searchTerm={searchTerm} onSearchChange={setSearchTerm} />
<Users users={displayedUsers} />
</Route>
<Route path='/addUser'>
<NewUserForm onAddUser={handleAddUsers} />
</Route>
<Route path='/'>
<Home />
</Route>
</Switch>
</AppContainer>
);
}
Solution 1:[1]
import "./App.css";
import Home from './components/Home';
import Users from './components/Users';
import NewUserForm from './components/NewUserForm';
import Navbar from './components/Navbar';
import Search from './components/Search';
import { useState ,useEffect} from 'react';
import { Route,Switch } from 'react-router-dom';
import styled from "styled-components";
import Reviews from "./components/Reviews";
import AddReviewForm from "./components/AddReviewForm";
function App() {
const[users,setUsers]=useState([]);
const[reviews,setReviews]=useState([]);
const[searchTerm,setSearchTerm]=useState("");
useEffect(() => {
document.title = "Shades of Fashion"
}, []);
useEffect(()=>{
fetch("http://localhost:9292/users")
.then(res=>res.json())
.then(userData=>{
setUsers(userData)
})
},[])
const displayedUsers=users.filter((user)=>{
return user.name.toLowerCase().includes(searchTerm.toLocaleLowerCase());
});
function handleAddUsers(newUser){
setUsers([...users,newUser]);
}
useEffect(()=>{
fetch("http://localhost:9292/reviews")
.then(res=>res.json())
.then(reviewData=>{
setReviews(reviewData)
})
},[])
const displayedReviews=reviews.filter((review)=>{
return review.name
});
function handleAddReviews(newReview){
setReviews([...reviews,newReview]);
}
return (
<AppContainer>
<Navbar />
<Switch>
<Route path="/reviews">
<Reviews reviews={displayedReviews}/>
</Route>
<Route path="/addReview">
<AddReviewForm onAddReview={displayedReviews}/>
</Route>
<Route path="/users">
<Search searchTerm={searchTerm} onSearchChange={setSearchTerm}/>
<Users users={displayedUsers}/>
</Route>
<Route path="/addUser">
<NewUserForm onAddUser={handleAddUsers} />
</Route>
<Route path="/">
<Home />
</Route>
</Switch>
</AppContainer>
)
}]
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | secretcoder |
