๐ React ์ ๋ฌธ 03 - JSX ๋ฌธ๋ฒ
๐ React ์
๋ฌธ 03 - JSX ๋ฌธ๋ฒ
๐
ใ์ํ์ ์ฒ์ ๋ง๋ ๋ฆฌ์กํธใ๋ฅผ ์ฝ๊ณ ์ ๋ฆฌํ ๊ธ์ ๋๋ค.
JSX๋?
1
const element = <h1>Hello, world! {name}</h1>;
JSX๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ํ์ฅํ ๋ฌธ๋ฒ์ผ๋ก,JavaScript eXtension์ ์๋ฏธํ๋ค.- ์๊ธฐ ์ฝ๋์ ๊ฐ์ด ์๋ฐ์คํฌ๋ฆฝํธ์
XML,HTML์ ํฉ์น ๊ฒ์ด๋ผ๊ณ ๋ณด๋ฉด ๋๋ค. JSX๋ฌธ๋ฒ์ ์ฌ์ฉํ๋ฉดComponent๋ด๋ถ์์createElement()๋ฉ์๋๋ก ๋์ฒด๋๋ค.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// JS
const element1 = React.createElement('h1', {className: 'greeting'}, 'Hello, world! ${name}'});
// JSX
const element2 = <h1 className="greeting">Hello, world! {name}</h1>;
/*
element = {
type: 'h1',
props: {
className: 'greeting'
children: 'Hello, world!'
}
}
*/
console.log(element1);
console.log(element2);
- ๊ฐ๋ น ์ ์ฝ๋์์
element1๊ณผelement2๋ฅผ ์ฝ์ ๋ก๊ทธ๋ก ์ถ๋ ฅํ๋ฉด ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋์จ๋ค. - ์ด์ฒ๋ผ
React.createElement()ํจ์๋ฅผ ๋ฐ๋ก ์ฌ์ฉํด๋ ๋๊ธฐ ๋๋ฌธ์JSX๋ฌธ๋ฒ์ด ํ์๋ ์๋๋ค. - ์ฐธ๊ณ ๋ก
JSX์์๋ ์ค๊ดํธ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฌด์กฐ๊ฑดJavascript์ฝ๋๊ฐ ๋ค์ด๊ฐ๋ค๊ณ ํ ์ ์๋ค.
ย JSX ์ ์จ์ผ ํ ๊น?
โ ์ฝ๋ ๊ฐ๋ ์ฑ ํฅ์
- ย
JSX๋ฌธ๋ฒ์ ์ฌ์ฉํ๋ฉด ์ฝ๋๊ฐ ๊ฐ๊ฒฐํด์ง๋ค. - ์ด๋ ์ฝ๋ ๊ฐ๋ ์ฑ์ ํฅ์ ์ํจ๋ค.
โ ๋ณด์ ํ๋ณด
Injection Attackํดํน ๊ณต๊ฒฉ์ ๋ฐฉ์ดํจ์ผ๋ก์จ ์ฝ๋์ ๋ณด์์ ํ๋ณดํ ์ ์๋ค.- ๋ฆฌ์กํธ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ ๋๋ง ํ๊ธฐ ์ ์ ์๋ฒ ๋ฉ๋ ๊ฐ์ ๋ฌธ์์ด๋ก ๋ณํํ๋ ๊ณผ์ ์ ๊ฑฐ์น๊ธฐ ๋๋ฌธ์ ๋ช ์์ ์ผ๋ก ์ ์ธ๋์ง ์์ ๊ฐ์ ๊ดํธ ์ฌ์ด์ ๋ค์ด๊ฐ ์ ์๋ค.
- ๊ฒฐ๊ณผ์ ์ผ๋ก ์ด๊ฒ์
XSS๋ผ ๋ถ๋ฆฌ๋Cross-site-scripting Attacks๊ณต๊ฒฉ์ ๋ฐฉ์ดํ ์ ์๋ค.
1
2
const input = response.cross_site_scripting_attacks_code;
const element = <h1>{input}</h1>;
- ์ ์ฝ๋์์
input์Javascript์ฝ๋๊ฐ ์๋ค๊ณ ํ๋๋ผ๋ ๋ฌธ์์ด๋ก ๋ณํํ๊ธฐ ๋๋ฌธ์ ํด๋น ์ฝ๋๋ ์คํ๋์ง ์๋๋ค.
์ค์ต
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import React from "react";
function Member(props) {
return (
<div>
<h3>{`๐ ๋ฉค๋ฒ์ ์ด๋ฆ์ ${props.name}์
๋๋ค.`}</h3>
<h4>{`โ
${props.name}๋์ ์ด ${props.numOfProject}๊ฐ์ ํ๋ก์ ํธ๋ฅผ ์งํํ๊ณ ์์ต๋๋ค.`}</h4>
<br/>
</div>
);
}
function Team() {
return (
<div>
<Member name="๊น์งํ" numOfProject={3} />
<Member name="๋ฐโโ" numOfProject={4} />
<Member name="์คโกโก" numOfProject={5} />
</div>
);
}
export default Team;
- ๋ฌธ์์ด์ ๋์ ์ธ ๊ฐ์ ๋ฃ์ผ๋ ค๋ฉด
${}๋ก ๊ฐ์ผ ํ ๋ฐฑํฑ์ผ๋ก ํ๋ฒ ๋ ๊ฐ์ธ์ผ ํ๋ค.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
import reportWebVitals from './reportWebVitals';
import Team from './Team';
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
<React.StrictMode>
<Team/>
</React.StrictMode>
);
reportWebVitals();
index.js์ ์์ฑํTeamComponent๋ฅผ ๋ฃ์ผ๋ฉด ๋๋ค.
ํ๊ณ
- ์ฑ ์ ์ฝ์ ๋๋ ์ดํด๊ฐ ๋ ๊ฒ ๊ฐ์๋๋ฐ, ์ค์ ํ๋ก์ ํธ์ ์ ์ฉํ๋ ค๋ ์๊ฐ์ฒ๋ผ ๋์ง ์์๋ค.
- ์ฑ ์ ์ฝ์ผ๋ฉด์ ์ค์ตํ๋ ๊ฒ๋ ์ค์ํ์ง๋ง ์ค์ ๋ก ์ ์ฉํ ๋ ๋ง์ ๊ณต๋ถ๊ฐ ๋๋ ๊ฒ ๊ฐ๋ค.
This post is licensed under CC BY 4.0 by the author.

