---
# System prepended metadata

title: SocialMedia
tags: [作品集]

---

###### tags: `作品集`
# SocialMedia
## 1. 設計架構
### 1.1 版面設計
首先依照功能，將版面劃分為限動導覽列和貼文列表兩個版面。
![](https://i.imgur.com/1DWNBQp.png =x500)
### 1.2 使用者資料 postData
大致上可以分成8個欄位。
![](https://i.imgur.com/lAUh1kS.png)
### 1.3 資料流傳遞(變數與function)
![](https://i.imgur.com/hpubCkp.png =x200)


## 2. 限動導覽列
這個部份是拿來製作 IG 限時動態的導覽列。
因此我們會需要多個大頭貼`Avatar`，從而組成一個導覽列。
> 功能上，是用來切換顯示不同發文者的所有貼文，以及累積的讚數。

![](https://i.imgur.com/J4hKIzt.png =x100)

### 2.1 Avatar
接收各別發文者`poster`，並將大頭貼需要的內容顯示出來。
```javascript=
// 大頭貼
function Avatar(props) {
  const { poster } = props;
  return (
    <div style={{ textAlign: 'center', marginLeft: '10px'}}>
      <img className='poster_avatar_img' src={poster.avatar} alt='avatar' />
      <div className='poster_avatar_text'>{poster.posterName}</div>
      <div className='poster_avatar_text'>{poster.likeCount}</div>
    </div>
  );
}
```
### 2.2 PosterList
接收所有發文者`posters` 和更換發文者`Require_poster`。
透過 `map` 的方式，依序將大頭貼以及切換頁面的功能傳入大頭貼`Avatar`。
```javascript=
// 限動的導覽列
const PosterList = (props) => {
  const { posters, Require_poster } = props;
  return (
    <div style={{display: 'flex', padding: '10px', width: '500px', border: '1px solid #C0C0C0', borderRadius: '5px', overflow: 'scroll', overflowY: 'hidden'}}>
      {posters.map((poster, index) => (
        <a key={index} onClick={() => Require_poster({posterId: poster.posterId})}>
          <Avatar poster={poster} />
        </a>
      ))}
    </div>
  );
}
```

## 3. 貼文列表
這個部份是拿來製作 IG 貼文列表的部份。
因此我們會需要多個貼文`PostItem`，從而組成一個貼文列表。
> 功能上，是用來顯示同一個發文者的所有貼文，以及顯示每個貼文累積的讚數。

![](https://i.imgur.com/YmZjHQX.png =x500)

### 3.1 PostItem
接收`data`和`Click_like`。
`data` 用來顯示貼文內容。
`Click_like` 則是按讚功能。
```javascript=
//貼文內容
function PostItem(props) {
  const { data, Click_like } = props;
  return (
    <div style={{width: '500px',paddingTop: '10px', border: '1px solid #c0c0c0', borderRadius: '5px', marginBottom: '10px'}}>
      <div style={{display: 'flex', alignItems: 'center', paddingLeft: '10px', paddingBottom: '5px'}}>
        <img className="post_postitem_avatar" src={data.avatar} alt='avatar'/>
        <div className="post_postitem_avatar_text">{data.posterName}</div>
      </div>
      <a onClick={() => Click_like({id: data.id, posterId: data.posterId})}>
        <img className="post_postitem_photo" src={data.photo} alt='photo' />
      </a>
      <div style={{padding: '5px 10px', display: 'flex'}}>
        <button onClick={() => Click_like({id: data.id, posterId: data.posterId})}>like</button>
        <div style={{paddingLeft: '10px'}}>{data.likeCount}人按讚</div>
      </div>
      
      <div style={{padding: '5px 10px'}}>{data.comment}</div>
      <div style={{padding: '5px 10px', color: '#a0a0a0', fontSize: '10px'}}>發布日期 {data.publish}</div>
    </div>
  );
}
```

### 3.2 PostList
接收發文者的貼文資料`selected_postData`和按讚`Click_like`。
透過 `map` 的方式，依序將`data`傳入每個貼文`PostItem`。
```javascript=
//貼文列表
function PostList(props) {
  const { selected_postData, Click_like } = props;
  return (
    <div style={{display: 'flex', justifyContent: 'center'}}>
      <div>
      {selected_postData.map((data, index) => (
        <PostItem key={index} data={data} Click_like={Click_like} />
      ))}
      </div>
    </div>
  )
}
```




