기능이 꽤 많이 들어갔던 페이지입니다.
거의 모든 기능은 백엔드에서 처리해줘서 걱정했던 페이지였지만 생각보다 수월하게 작업할 수 있었습니다.
하지만 한페이지에 4개씩 2줄로 총 8개의 페이지가 나오게 구현하는 게 많이 어려웠습니다ㅠㅠ
게시글 목록을 볼 수 있는 페이지입니다.

const today = dayjs();
const [selectedStartDate, setSelectedStartDate] = useState(dayjs("2001-03-02"));
const [selectedEndDate, setSelectedEndDate] = useState(dayjs());
<LocalizationProvider dateAdapter={AdapterDayjs}>
<DatePicker
format="YYYY/MM/DD"
label="시작 날짜"
value={selectedStartDate}
onChange={(newValue) => setSelectedStartDate(newValue)}
/>
<Stack>~</Stack>
<DatePicker
format="YYYY/MM/DD"
label="종료 날짜"
value={selectedEndDate}
onChange={(newValue) => setSelectedEndDate(newValue)}
/>
</LocalizationProvider>
const [sortByDate, setSortByDate] = useState(false);
const handleSwitchChange = () => {
setSortByDate((prevSortByDate) => !prevSortByDate);
};
<Stack
direction="row"
alignItems="center"
justifyContent="center"
>
<Stack fontSize="12px">최신순</Stack>
<Switch
checked={sortByDate}
onChange={handleSwitchChange}
></Switch>
<Stack fontSize="12px">좋아요 순</Stack>
</Stack>
const [selectedTitle, setSelectedTitle] = useState("글 제목");
if (selectedTitle === "글 제목") {
setType("title");
} else if (selectedTitle === "글 내용") {
setType("content");
} else if (selectedTitle === "작성자") {
setType("writer");
} else if (selectedTitle === "태그") {
setType("tag");
}
<Stack direction="row" spacing={1}>
<Stack>
<Autocomplete
id="title-autocomplete"
options={titleOptions}
value={selectedTitle}
onChange={(event, newValue) => setSelectedTitle(newValue)}
renderInput={(params) => <TextField {...params} />}
/>
</Stack>
<Stack>
<TextField
label="검색"
value={searchQuery}
onChange={handleSearchChange}
InputProps={{
endAdornment: (
<InputAdornment position="end">
<img
src={SearchIcon}
alt="search"
style={{ cursor: "pointer" }}
/>
</InputAdornment>
),
}}
/>
</Stack>
<Stack
bgcolor="#FF8181"
sx={{
cursor: "pointer",
color: "white",
borderRadius: "10px",
alignItems: "center",
justifyContent: "center",
width: "35%",
}}
onClick={() => {
navigate("/Write");
}}
>
<Stack fontSize="20px">글쓰기</Stack>
</Stack>
</Stack>
{content.isPinned === 1 && (
<img
src={PushPin}
alt="PushPin"
style={{
position: "absolute",
top: "-10%",
left: "10px",
zIndex: 2,
}}
/>
)}
{content.postTag.length > 2 && (
<Stack
sx={{
margin: "5px",
color: "#FF8181",
border: "1px solid #FF8181",
borderRadius: "15px",
width: "fit-content",
height: "25px",
justifyContent: "center",
}}
>
<Stack
alignItems="center"
fontSize="13px"
margin="10px"
>
...
</Stack>
</Stack>
)}