ํ•จ์ˆ˜ ์ „๋‹ฌ ๋ Œ๋” ์—๋Ÿฌ ๋ฌธ์ œ & ๋ฆฌ์•กํŠธ className ์ž‘์„ฑ๋ฒ• ์ •๋ฆฌ

2021. 11. 15. 00:16ใ†๐Ÿ’™ React

 

1. ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ useState๋ฅผ ํ™œ์šฉํ•ด type์˜ ๋ณ€์ˆ˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•ด์ฃผ๊ณ  ์‹ถ์„ ๋•Œ

์ฝ”๋“œ์˜ ์ค‘๋ณต๋˜๋Š” ๋ถ€๋ถ„์„ ํ•จ์ˆ˜๋กœ ์ž‘์„ฑํ•ด ์ „๋‹ฌํ•ด ์ฃผ๋ คํ–ˆ๋Š”๋ฐ ๋ฌดํ•œ ๋ฐ˜๋ณต์ด ๋Œ์•„๊ฐ„๋‹ค.

const [type, setType] = useState('');
const handleSortChange = (type) => {
    setType(type);
};

์ด๋Š” ๋ฒ„ํŠผ์„ ํด๋ฆญํ–ˆ์„ ๋•Œ ํ•จ์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜๋ฉด ๋ฐœ์ƒํ•˜๋Š” ์—๋Ÿฌ๋กœ

<button onClick={ handleSortChange("date") }>button</button>

์œ„ ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋  ๋•Œ state๋ฅผ ๋ณ€ํ™”ํ•˜๋Š” ์ฝ”๋“œ์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ณ„์† ๋ Œ๋”๋˜๋Š” ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

 

 

state ๋ณ€ํ™”์‹œํ‚ฌ ๋• ์•„๋ž˜ ๋ฐฉ๋ฒ•์œผ๋กœ ์ž‘์„ฑ

  • ( ) => arrow function์œผ๋กœ ํ•จ์ˆ˜๋ฅผ ์ „๋‹ฌํ•ด์ฃผ๊ฑฐ๋‚˜
  • ( ) => ๋ฐ”๋กœ setType() ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด ๋ณ€์ˆ˜๋ฅผ ์—…๋ฐ์ดํŠธ ํ•˜๊ฑฐ๋‚˜
  • ๋” ์š”์†Œ์— id ๊ฐ’์„ ์ง€์ •ํ•ด์ฃผ๊ณ  ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์ „๋‹ฌํ•ด e.target.getAttribute("id") ํ˜น์€ e.target.id์œผ๋กœ ๋ณ€์ˆ˜๊ฐ’ ์—…๋ฐ์ดํŠธ
<button onClick={()=>handleSortChange("date")}>button</button>

<button onClick={()=>setType("date")}>button</button>

<button onClick={(e)=>handleSortChange(e)}>button</button>

 

  • ์ „์ฒด ์ฝ”๋“œ ํ™•์ธ
import { useState } from "react";

export default function App() {
  const [type, setType] = useState(null);
  const handleType = (type) => {
    setType(type);
  };
  const handleTypeWithId = (e) => {
    setType(e.target.getAttribute("id")); // e.target.id
  };

  return (
    <div className="App">
      <button onClick={() => handleType("btn1")}>btn 1</button> // 1๋ฒˆ. ์ง์ ‘ type ๋ณ€์ˆ˜๊ฐ’ ์ „๋‹ฌ
      <button onClick={() => setType("btn2")}>btn2</button> // 2๋ฒˆ. ํ•จ์ˆ˜ ์ „๋‹ฌ์—†์ด ๋ฐ”๋กœ setType ์ฝ”๋“œ ์ž‘์„ฑ
      <button onClick={(e) => handleClick(e)}>btn2</button> // 3๋ฒˆ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์ด์šฉํ•ด id๊ฐ’ ๋ฐ›์•„์™€ type ๋ณ€์ˆ˜๊ฐ’ ๋ณ€๊ฒฝ
    </div>
  );
}

 

 

2. className์„ ์ ์šฉํ•˜๋Š” ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•

module.css๋ฅผ ์ž์ฃผ ์“ฐ๋‹ค ๋ณด๋‹ˆ ๊ธฐ๋ณธ ํด๋ž˜์Šค๋ช… ์ ์šฉํ•˜๋Š” ๋ฒ•์ด ๊ณง์žฅ ๊ธฐ์–ต๋‚˜์ง€ ์•Š์•˜๋‹ค.

์ด๋ฒˆ ์ •๋ฆฌ๋ฅผ ํ†ตํ•ด ํ™•์‹คํžˆ ๊ธฐ์–ตํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

- ๊ธฐ๋ณธ html์—์„œ๋Š” DOM ์š”์†Œ๋“ค์— class์— css ํด๋ž˜์Šค๋ช…์„ ์ž‘์„ฑํ•ด์ค€๋‹ค.

<p class="one"> html class </p>

 

๋ฆฌ์•กํŠธ์—์„œ๋Š” JSX ๋ฌธ๋ฒ•์œผ๋กœ className์„ ์‚ฌ์šฉํ•ด ์Šคํƒ€์ผ์„ ์ ์šฉํ•ด์ค€๋‹ค.

1 ) module.css

- ๊ธฐ๋ณธ ํด๋ž˜์Šค๋ช… ์ž‘์„ฑ

<p className={styles.one}> module css 1 </p>

 

- css 2๊ฐœ ์ง€์ • ์‹œ

<p className={`${styles.one} ${styles.two}`}> module css 2 </p>

<p className={[ style.one, style.two ]}.join(' ')}> module css 2 </p>

 

- className์— '-'๊ฐ€ ํฌํ•จ๋œ ๊ฒฝ์šฐ ์ž‘์„ฑ๋ฒ•

<p className={styles['one-type']}> module css 3 </p>

 

2) ๊ธฐ๋ณธ react css

<p className="one"> react css </p>

<p className="one-type two"> react css </p>

- ์‚ผํ•ญ ์—ฐ์‚ฐ์ž๋ฅผ ํ™œ์šฉํ•ด ์ƒํ™ฉ๋ณ„ css ์ง€์ •

<p className={num == 0 ? "one" : "one two"}> react css 2 </p>

 

 

3. table ๋ฐ์ดํ„ฐ๋ฅผ ์ •๋ ฌํ•˜๋Š” ๋ฐฉ๋ฒ• ( ์ผ์ž๋ณ„ ์ •๋ ฌ )

const TABLE_DATA = [
    {
      title: "์˜ค๋Š˜์€ ์ˆ˜์—…์ด ์—†์Šต๋‹ˆ๋‹ค.",
      viewCount: 12,
      date: "2021-11-11"
    },
    {
      title: "๋‚ด์ผ์€ ๋ธ”๋กœ๊ทธ ํฌ์ŠคํŒ…์„ ์ •๋ฆฌํ•ฉ์‹œ๋‹ค.",
      viewCount: 22,
      date: "2021-10-10"
    },
    {
      title: "๋ฌธ์„œํ™”๋ฅผ ์žŠ์ง€ ๋ง™์‹œ๋‹ค.",
      viewCount: 2,
      date: "2020-10-10"
    }
  ];

 

์œ„์™€ ๊ฐ™์€ ์ „๋‹ฌ๋œ ๋ฐ์ดํ„ฐ ์ค‘ 'viewCount' ๊ฐ™์€ ์ˆซ์ž ๋ณ€์ˆ˜๋Š” sort ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์ •๋ ฌํ•  ์ˆ˜ ์žˆ์ง€๋งŒ,

๋ฌธ์ž์—ด๋กœ ์ „๋‹ฌ๋œ ๋‚ ์งœ ๋ฐ์ดํ„ฐ๋ฅผ ์ •๋ ฌํ•˜๊ธฐ ์œ„ํ•ด์„œ new Date( ).getTime( )๋ฅผ ํ™œ์šฉํ•ด ์ „๋‹ฌ๋œ ์ผ์ž๋ฅผ ์ˆซ์ž๋กœ ๋ณ€ํ™˜ํ•จ์œผ๋กœ์จ ์ˆœ์„œ๋ฅผ ์ •๋ ฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋‚ ์งœ ๋ณ€ํ™˜๋œ ๊ฐ’ ํ™•์ธ

let data = tableData.sort((a,b) => {
    if(sortedType === 'viewCount') return b[sortedType] - a[sortedType];
    else return new Date(b[sortedType]).getTime() - new Date(a[sortedType]).getTime();
  })

์‚ฌ์šฉ์ž ํด๋ฆญ์„ ํ†ตํ•ด ์ •๋ ฌ ํƒ€์ž…์ด ๋ฐ”๋€Œ๋ฉด data ๋ณ€์ˆ˜๊ฐ€ ์žฌ์ •๋ ฌ๋œ๋‹ค.

sortedType์— ๋‚ ์งœ๊ฐ€ ์ „๋‹ฌ๋  ๊ฒฝ์šฐ

๊ฐ ๊ฐ์ฒด์˜ ์ผ์ž๊ฐ’์„ ์ˆซ์ž๋กœ ๋ณ€ํ™˜ํ•ด ์ •๋ ฌ๋œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ด์ค€๋‹ค. ( ex. getTime()์„ ํ†ตํ•ด )

function Table({ tableData }) {
  const [sortedType, setSortedType] = useState('date');
  let data = [...tableData].sort((a, b) => { // type์— ๋”ฐ๋ฅธ ๋ฐ์ดํ„ฐ ์ •๋ ฌ
    if (sortedType == "viewCount") return a[sortedType] - b[sortedType];
    if (sortedType == "date"){
       return new Date(b[sortedType]).getTime() - new Date(a[sortedType]).getTime();
    }
  });
  
  return (
    <div>
      <table>
        <thead>
          <tr>
            <th>Title</th>
            <th onClick={()=>setSortedType("viewCount")}>ViewCount</th> // ํด๋ฆญ์‹œ ์ •๋ ฌ ํƒ€์ž… ์—…๋ฐ์ดํŠธ
            <th onClick={()=>setSortedType("date")}>Date</th>
          </tr>
        </thead>
        <tbody>
          {data.map((data, index) => {
            return (
              <tr key={index}>
                <td>{data.title}</td>
                <td>{data.ViewCount}</td>
                <td>{data.date}</td>
              </tr>
            );
          })}
        </tbody>
      </table>
    </div>
  );
}

export default Articles;

Posted by Ang