๋ค์ํ ์ ๋ ฅํผ์ ๋ค๋ฃฐ๋ input๋ง๊ณ ๋ textarea๋ ์๋นํ ๋ง์ด ๋ค๋ฃจ๋ ํธ์ธ๋ฐ,
textarea๋ input๊ณผ ๋ณ๊ฐ๋ก ์๊ทผํ ๋ง์ ์ปค์คํ ์ ํด์ค์ผ ํฉ๋๋ค.
๊ธฐ๋ณธ textarea ๊ฐ์ ๊ฒฝ์ฐ resize ์ต์ ์ด ๊ธฐ๋ณธ์ผ๋ก ๋ค์ด๊ฐ ์๊ณ ,
input๊ณผ ๋ฌ๋ฆฌ textarea ๋ ์ฌ๋ฌ ์ค์ ๊ธ์ ๊ธธ๊ฒ ์ ๋ ฅํ๋๋ฐ ์ฌ์ฉ๋๊ธฐ ๋๋ฌธ์,
์ถ๋ ฅ์์๋ ๋ฐ๋ก ์ฒ๋ฆฌ๋ฅผ ํด์ค์ผํฉ๋๋ค.
1. textarea resize ์ฌ์ฉํ์ง ์๊ธฐ
2. textarea placeholder ์์ ์ค๋ฐ๊ฟ ์ฒ๋ฆฌํ๊ธฐ
3. textarea ์์ tab ์ฌ์ฉํ๊ธฐ
1. ๊ธฐ๋ณธ ์์ค
- JSX
import { useState } from 'react'
import './app.css'
function App() {
const [textValue, setTextValue] = useState("");
const handleSetValue = (e) => {
setTextValue(e.target.value);
};
return (
<div className="app">
<textarea
placeholder="์ฌ๊ธฐ์ ์
๋ ฅํ์ธ์"
value={textValue}
onChange={(e) => handleSetValue(e)}
></textarea>
<hr />
<p className="paragraph">{textValue}</p>
</div>
);
}
export default App;
- CSS
.app {
padding: 10px
}
textarea {
width: 250px;
height: 200px;
}
2. textarea resize ์ฌ์ฉํ์ง ์๊ธฐ
๊ธฐ๋ณธ์ผ๋ก ๋ง์ฐ์ค ๋๋๊ทธ๋ก textarea์ ์ฌ์ด์ฆ๋ฅผ ์์ ๋กญ๊ฒ ์กฐ์ ํ ์ ์๋ ์ต์ ์ด ์์ต๋๋ค.
์ด๋ css ๋ก ๊ฐ๋จํ๊ฒ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
textarea { resize: none; }
3. textarea placeholder ์์ ์ค๋ฐ๊ฟ ์ฒ๋ฆฌํ๊ธฐ
placehoder ์์ ์ฌ๋ฌ ์ค๋ก ํ์๋ฅผ ํ๊ณ ์ถ๋ค๋ฉด ํน์๋ฌธ์๋ฅผ ํํํ๋ ์ฝ๋๋ฅผ ์ถ๊ฐํด์ฃผ๋ฉด๋ฉ๋๋ค.
์ ํํ ์ฐจ์ด๋ ๋ชจ๋ฅด๊ฒ ์ผ๋, ํน์ ๋๋ ๋๊ฐ๋ฅผ ๊ฐ์ด ์ ๋ ฅํด์ค๋ ๋จนํ๋๋ค.
<textarea placeholder="์ฌ๊ธฐ์ ์
๋ ฅํ์ธ์"></textarea>
4. textarea ์์ tab ์ฌ์ฉํ๊ธฐ
textarea์์ tab์ ์ ๋ ฅํ๊ฒ ๋๋ฉด ์ผ๋ฐ์ ์ผ๋ก ๋ค์ Element๋ก focus ๊ฐ ๋์ด๊ฐ ๋ฒ๋ฆฌ๊ธฐ๋๋ฌธ์ tab์ ๋ ฅ์ด ๋ถ๊ฐํฉ๋๋ค.
์ด๋ฅผ ๊ตฌํํ๊ธฐ ์ํด keyCode๊ฐ์ ๋ฐ์ 9(tab์ keyCode๊ฐ)์ธ ๊ฒฝ์ฐ ๊ธฐ๋ณธ ๊ธฐ๋ฅ์ธ ๋ค์ Element์ ํฌ์ปค์ค ์ด๋์ ๋ฐฉ์ง์ฒ๋ฆฌ๋ฅผ ํด์ค ๋ค, select๊ฐ ๋ ์์์ ๊ณผ ๋์ ์ ๊ตฌํด ๊ทธ ์ฌ์ด์ "\t" ๊ฐ์ ๋ฃ์ด์ฃผ๋ฉด ๋ฉ๋๋ค.
\t๋ฅผ ์ ๋ ฅํ๋๊ฒ์ด tab์ ์ ๋ ฅํ๋ ๊ฒ๊ณผ ๊ฐ์ ์ฒ๋ฆฌ๋ฅผ ํด์ค๋ค๊ณ ๋ณด๋ฉด ๋ฉ๋๋ค.
โป ์ฐธ๊ณ ๋ก keyCode๊ฐ์ onChange๋ก ๋ฐ์ง ์๊ณ onKeyDown์ผ๋ก ๋ฐ์ต๋๋ค.
๋ก์ง์ ์ ๋ฆฌํด ๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
1. ํฌ์ปค์ค ๊ธฐ๋ฅ ๋ฐฉ์ง
e.preventDefault();
2. selection ๊ธฐ์ค์ผ๋ก ์์๊ณผ ๋ ๊ตฌํ๊ธฐ
let start = e.target.selectionStart;
let end = e.target.selectionEnd;
3. \t ์ฝ์ ํ๊ธฐ
value = val.substring(0, start) + "\t" + val.substring(end);
ํด๋น ์ฝ๋๋ React์์ ๊ตฌํ๋์์ง๋ง, javascript๋ jquery๋ก ๊ตฌํํ ๋๋ ๋๊ฐ์ ์๋ฆฌ์ ๋๋ค.
4. ์ถ๋ ฅ์ \t, \n ์ฒ๋ฆฌํ๊ธฐ
์ด๋ ๊ฒ ์ ๋ ฅ์ ๋ฐ๋ก ์ฒ๋ฆฌ๋ฅผ ํด๋ ์ถ๋ ฅ์์๋ ๋ชจ๋ ๋ฌด์๋ ์ฑ๋ก ์ถ๋ ฅ๋๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค.
์ด๋ ์ผ์ผ์ด split์ ํ์ฌ ์ฝ๋๋ฅผ ์ฝ์ ํ๋ ๊ฒฝ์ฐ๋ ์์ง๋ง css๋ฅผ ํตํด ์ฝ๊ฒ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
white-space: pre-wrap;
๊ฒฐ๊ณผ์ฝ๋
'๊ฐ๋ฐ ๐พ > ReactJS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Axios ๋ก ํ์ผ๊ณผ JSON ํ์ผ ๋์์ ๋๊ธฐ๊ธฐ (0) | 2023.06.08 |
---|---|
props๋ก ์ ๋ฌ๋๋ ํ ์คํธ ๋ผ์ธ ์ค๋ฐ๊ฟ ์ฒ๋ฆฌ๋ 2๊ฐ์ง ๋ฐฉ๋ฒ ! (2) | 2021.08.26 |
Toast ํ์ ๋ง๋ค๊ธฐ (0) | 2021.07.06 |
์ด๊ฐ๋จ useContext + useReducer (0) | 2021.07.02 |
React ์์ useRef ์ฌ์ฉํ๊ธฐ (0) | 2021.06.30 |