๐Ÿ’ป My Work/๐ŸŽจ Material Design

[Material Design] Material-UI(MUI)๋กœ react & styled component ์‚ฌ์šฉํ•˜๊ธฐ <TextField - input ์ž…๋ ฅ ์ œํ•œ ๊ธฐ๋Šฅ (๊ธ€์ž ์ˆ˜ ์ œํ•œ, ๋น„๋ฐ€๋ฒˆํ˜ธ)>

Jaeseo Kim 2022. 10. 4. 23:55

๋‹‰๋„ค์ž„ ์ž…๋ ฅ

์œ„์™€ ๊ฐ™์ด ๊ธ€์ž ์ˆ˜ ์ œํ•œ input ๋งŽ์ด ๋ณด์…จ์„ ๊ฑฐ์—์š”!!!

 

 

๋น„๋ฐ€๋ฒˆํ˜ธ ์ž…๋ ฅ

๋˜ํ•œ, ๋น„๋ฐ€๋ฒˆํ˜ธ์™€ ๊ฐ™์ด ๋ณด์•ˆ๋ฌธ์ œ๋ฅผ ์œ„ํ•ด ์ž…๋ ฅ๊ฐ’์ด ์•ˆ ๋ณด์ด๋„๋ก ํ•˜๋Š” input๋„ ๋งŽ์ด ๋ณด์…จ์„ ๊ฑฐ์—์š”!!!

 

๊ตฌํ˜„ํ•ด๋ด…์‹œ๋‹ค.

 

00. ๊ธ€์ž ์ˆ˜ ์ œํ•œ


import { TextField } from "@material-ui/core";

  /** ๋‹‰๋„ค์ž„ ์ตœ๋Œ€ ๊ธธ์ด */
  const NICKNAME_LIMIT = 20;
  
  /** ๋‹‰๋„ค์ž„ ์ž…๋ ฅ๊ฐ’ */
  const [values, setValues] = React.useState({
    nickName: ""
  });
  const handleChange = (nickName) => (event) => {
    setValues({ ...values, [nickName]: event.target.value });
  };

...

<TextField
    label="Nickname"
    inputProps={{
      maxlength: NICKNAME_LIMIT
    }}
    value={values.name}
    helperText={`${values.nickName.length}/${NICKNAME_LIMIT}`}
    onChange={handleChange("nickName")}
    variant="outlined"
  />

TextField๋ฅผ ์ด์šฉํ•ฉ๋‹ˆ๋‹ค!

๊ธ€์ž ์ˆ˜ ์ œํ•œ์€ inputProps์˜ maxlength์— intํ˜•์œผ๋กœ ์ธ์ž๋ฅผ ๋ณด๋ƒ…๋‹ˆ๋‹ค.

ํŠนํžˆ, ์ตœ๋Œ€ ๋ช‡ ๊ธ€์ž์ธ์ง€ ๊ทธ๋ฆฌ๊ณ  ํ˜„์žฌ ๋ช‡ ๊ธ€์ž ์ž‘์„ฑํ–ˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ๋„๋ก helperText๋กœ ๊ตฌํ˜„ํ•˜์—ฌ ์ธ์ž๋ฅผ ๋ณด๋ƒ…๋‹ˆ๋‹ค.

 

 

01. ๋น„๋ฐ€๋ฒˆํ˜ธ


 <TextField
    ...
    label="Password"
    type="password"
    ...
  />

๊ฐ„๋‹จํ•˜๊ฒŒ!!!!!!!!

type="password"๋งŒ ์ธ์ž๋กœ ๋ณด๋‚ด์ฃผ๋ฉด ๋์ž…๋‹ˆ๋‹ค!

 

์ด์ œ, ๋ณธ์ธ ์ทจํ–ฅ์— ๋งž๊ฒŒ ์˜ค๋ฅธ์ชฝ ๋์— ๋ˆˆ ์•„์ด์ฝ˜์œผ๋กœ ๋ณด์˜€๋‹ค ์•ˆ ๋ณด์˜€๋‹ค ํ•  ์ˆ˜ ์žˆ๊ฒŒ ์•„๋ž˜์™€ ๊ฐ™์ด ๊ตฌํ˜„๋„ ๊ฐ€๋Šฅํ•˜๊ฒ ์ฃ ??!!

 

if(๋ˆˆ ์•„์ด์ฝ˜ ํ™œ์„ฑํ™” ๋˜์–ด์žˆ๋‹ค๋ฉด) type="password"

else (์•„๋‹ˆ๋ผ๋ฉด)  type="text"

 

โœจโœจโœจโœจ